1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2017-2018 Intel Corporation. All rights reserved. */
3 #include <linux/memremap.h>
4 #include <linux/device.h>
5 #include <linux/mutex.h>
6 #include <linux/list.h>
7 #include <linux/slab.h>
9 #include "dax-private.h"
12 static struct class *dax_class
;
14 static DEFINE_MUTEX(dax_bus_lock
);
16 #define DAX_NAME_LEN 30
18 struct list_head list
;
19 char dev_name
[DAX_NAME_LEN
];
22 static int dax_bus_uevent(struct device
*dev
, struct kobj_uevent_env
*env
)
25 * We only ever expect to handle device-dax instances, i.e. the
26 * @type argument to MODULE_ALIAS_DAX_DEVICE() is always zero
28 return add_uevent_var(env
, "MODALIAS=" DAX_DEVICE_MODALIAS_FMT
, 0);
31 static struct dax_device_driver
*to_dax_drv(struct device_driver
*drv
)
33 return container_of(drv
, struct dax_device_driver
, drv
);
36 static struct dax_id
*__dax_match_id(struct dax_device_driver
*dax_drv
,
39 struct dax_id
*dax_id
;
41 lockdep_assert_held(&dax_bus_lock
);
43 list_for_each_entry(dax_id
, &dax_drv
->ids
, list
)
44 if (sysfs_streq(dax_id
->dev_name
, dev_name
))
49 static int dax_match_id(struct dax_device_driver
*dax_drv
, struct device
*dev
)
53 mutex_lock(&dax_bus_lock
);
54 match
= !!__dax_match_id(dax_drv
, dev_name(dev
));
55 mutex_unlock(&dax_bus_lock
);
65 static ssize_t
do_id_store(struct device_driver
*drv
, const char *buf
,
66 size_t count
, enum id_action action
)
68 struct dax_device_driver
*dax_drv
= to_dax_drv(drv
);
69 unsigned int region_id
, id
;
70 char devname
[DAX_NAME_LEN
];
71 struct dax_id
*dax_id
;
75 fields
= sscanf(buf
, "dax%d.%d", ®ion_id
, &id
);
78 sprintf(devname
, "dax%d.%d", region_id
, id
);
79 if (!sysfs_streq(buf
, devname
))
82 mutex_lock(&dax_bus_lock
);
83 dax_id
= __dax_match_id(dax_drv
, buf
);
85 if (action
== ID_ADD
) {
86 dax_id
= kzalloc(sizeof(*dax_id
), GFP_KERNEL
);
88 strncpy(dax_id
->dev_name
, buf
, DAX_NAME_LEN
);
89 list_add(&dax_id
->list
, &dax_drv
->ids
);
93 /* nothing to remove */;
94 } else if (action
== ID_REMOVE
) {
95 list_del(&dax_id
->list
);
98 /* dax_id already added */;
99 mutex_unlock(&dax_bus_lock
);
103 if (action
== ID_ADD
)
104 rc
= driver_attach(drv
);
110 static ssize_t
new_id_store(struct device_driver
*drv
, const char *buf
,
113 return do_id_store(drv
, buf
, count
, ID_ADD
);
115 static DRIVER_ATTR_WO(new_id
);
117 static ssize_t
remove_id_store(struct device_driver
*drv
, const char *buf
,
120 return do_id_store(drv
, buf
, count
, ID_REMOVE
);
122 static DRIVER_ATTR_WO(remove_id
);
124 static struct attribute
*dax_drv_attrs
[] = {
125 &driver_attr_new_id
.attr
,
126 &driver_attr_remove_id
.attr
,
129 ATTRIBUTE_GROUPS(dax_drv
);
131 static int dax_bus_match(struct device
*dev
, struct device_driver
*drv
);
133 static struct bus_type dax_bus_type
= {
135 .uevent
= dax_bus_uevent
,
136 .match
= dax_bus_match
,
137 .drv_groups
= dax_drv_groups
,
140 static int dax_bus_match(struct device
*dev
, struct device_driver
*drv
)
142 struct dax_device_driver
*dax_drv
= to_dax_drv(drv
);
145 * All but the 'device-dax' driver, which has 'match_always'
146 * set, requires an exact id match.
148 if (dax_drv
->match_always
)
151 return dax_match_id(dax_drv
, dev
);
155 * Rely on the fact that drvdata is set before the attributes are
156 * registered, and that the attributes are unregistered before drvdata
157 * is cleared to assume that drvdata is always valid.
159 static ssize_t
id_show(struct device
*dev
,
160 struct device_attribute
*attr
, char *buf
)
162 struct dax_region
*dax_region
= dev_get_drvdata(dev
);
164 return sprintf(buf
, "%d\n", dax_region
->id
);
166 static DEVICE_ATTR_RO(id
);
168 static ssize_t
region_size_show(struct device
*dev
,
169 struct device_attribute
*attr
, char *buf
)
171 struct dax_region
*dax_region
= dev_get_drvdata(dev
);
173 return sprintf(buf
, "%llu\n", (unsigned long long)
174 resource_size(&dax_region
->res
));
176 static struct device_attribute dev_attr_region_size
= __ATTR(size
, 0444,
177 region_size_show
, NULL
);
179 static ssize_t
align_show(struct device
*dev
,
180 struct device_attribute
*attr
, char *buf
)
182 struct dax_region
*dax_region
= dev_get_drvdata(dev
);
184 return sprintf(buf
, "%u\n", dax_region
->align
);
186 static DEVICE_ATTR_RO(align
);
188 static struct attribute
*dax_region_attributes
[] = {
189 &dev_attr_region_size
.attr
,
190 &dev_attr_align
.attr
,
195 static const struct attribute_group dax_region_attribute_group
= {
196 .name
= "dax_region",
197 .attrs
= dax_region_attributes
,
200 static const struct attribute_group
*dax_region_attribute_groups
[] = {
201 &dax_region_attribute_group
,
205 static void dax_region_free(struct kref
*kref
)
207 struct dax_region
*dax_region
;
209 dax_region
= container_of(kref
, struct dax_region
, kref
);
213 void dax_region_put(struct dax_region
*dax_region
)
215 kref_put(&dax_region
->kref
, dax_region_free
);
217 EXPORT_SYMBOL_GPL(dax_region_put
);
219 static void dax_region_unregister(void *region
)
221 struct dax_region
*dax_region
= region
;
223 sysfs_remove_groups(&dax_region
->dev
->kobj
,
224 dax_region_attribute_groups
);
225 dax_region_put(dax_region
);
228 struct dax_region
*alloc_dax_region(struct device
*parent
, int region_id
,
229 struct resource
*res
, int target_node
, unsigned int align
,
230 unsigned long pfn_flags
)
232 struct dax_region
*dax_region
;
235 * The DAX core assumes that it can store its private data in
236 * parent->driver_data. This WARN is a reminder / safeguard for
237 * developers of device-dax drivers.
239 if (dev_get_drvdata(parent
)) {
240 dev_WARN(parent
, "dax core failed to setup private data\n");
244 if (!IS_ALIGNED(res
->start
, align
)
245 || !IS_ALIGNED(resource_size(res
), align
))
248 dax_region
= kzalloc(sizeof(*dax_region
), GFP_KERNEL
);
252 dev_set_drvdata(parent
, dax_region
);
253 memcpy(&dax_region
->res
, res
, sizeof(*res
));
254 dax_region
->pfn_flags
= pfn_flags
;
255 kref_init(&dax_region
->kref
);
256 dax_region
->id
= region_id
;
257 dax_region
->align
= align
;
258 dax_region
->dev
= parent
;
259 dax_region
->target_node
= target_node
;
260 if (sysfs_create_groups(&parent
->kobj
, dax_region_attribute_groups
)) {
265 kref_get(&dax_region
->kref
);
266 if (devm_add_action_or_reset(parent
, dax_region_unregister
, dax_region
))
270 EXPORT_SYMBOL_GPL(alloc_dax_region
);
272 static ssize_t
size_show(struct device
*dev
,
273 struct device_attribute
*attr
, char *buf
)
275 struct dev_dax
*dev_dax
= to_dev_dax(dev
);
276 unsigned long long size
= resource_size(&dev_dax
->region
->res
);
278 return sprintf(buf
, "%llu\n", size
);
280 static DEVICE_ATTR_RO(size
);
282 static int dev_dax_target_node(struct dev_dax
*dev_dax
)
284 struct dax_region
*dax_region
= dev_dax
->region
;
286 return dax_region
->target_node
;
289 static ssize_t
target_node_show(struct device
*dev
,
290 struct device_attribute
*attr
, char *buf
)
292 struct dev_dax
*dev_dax
= to_dev_dax(dev
);
294 return sprintf(buf
, "%d\n", dev_dax_target_node(dev_dax
));
296 static DEVICE_ATTR_RO(target_node
);
298 static ssize_t
modalias_show(struct device
*dev
, struct device_attribute
*attr
,
302 * We only ever expect to handle device-dax instances, i.e. the
303 * @type argument to MODULE_ALIAS_DAX_DEVICE() is always zero
305 return sprintf(buf
, DAX_DEVICE_MODALIAS_FMT
"\n", 0);
307 static DEVICE_ATTR_RO(modalias
);
309 static umode_t
dev_dax_visible(struct kobject
*kobj
, struct attribute
*a
, int n
)
311 struct device
*dev
= container_of(kobj
, struct device
, kobj
);
312 struct dev_dax
*dev_dax
= to_dev_dax(dev
);
314 if (a
== &dev_attr_target_node
.attr
&& dev_dax_target_node(dev_dax
) < 0)
319 static struct attribute
*dev_dax_attributes
[] = {
320 &dev_attr_modalias
.attr
,
322 &dev_attr_target_node
.attr
,
326 static const struct attribute_group dev_dax_attribute_group
= {
327 .attrs
= dev_dax_attributes
,
328 .is_visible
= dev_dax_visible
,
331 static const struct attribute_group
*dax_attribute_groups
[] = {
332 &dev_dax_attribute_group
,
336 void kill_dev_dax(struct dev_dax
*dev_dax
)
338 struct dax_device
*dax_dev
= dev_dax
->dax_dev
;
339 struct inode
*inode
= dax_inode(dax_dev
);
342 unmap_mapping_range(inode
->i_mapping
, 0, 0, 1);
344 EXPORT_SYMBOL_GPL(kill_dev_dax
);
346 static void dev_dax_release(struct device
*dev
)
348 struct dev_dax
*dev_dax
= to_dev_dax(dev
);
349 struct dax_region
*dax_region
= dev_dax
->region
;
350 struct dax_device
*dax_dev
= dev_dax
->dax_dev
;
352 dax_region_put(dax_region
);
357 static void unregister_dev_dax(void *dev
)
359 struct dev_dax
*dev_dax
= to_dev_dax(dev
);
361 dev_dbg(dev
, "%s\n", __func__
);
363 kill_dev_dax(dev_dax
);
368 struct dev_dax
*__devm_create_dev_dax(struct dax_region
*dax_region
, int id
,
369 struct dev_pagemap
*pgmap
, enum dev_dax_subsys subsys
)
371 struct device
*parent
= dax_region
->dev
;
372 struct dax_device
*dax_dev
;
373 struct dev_dax
*dev_dax
;
379 return ERR_PTR(-EINVAL
);
381 dev_dax
= kzalloc(sizeof(*dev_dax
), GFP_KERNEL
);
383 return ERR_PTR(-ENOMEM
);
385 memcpy(&dev_dax
->pgmap
, pgmap
, sizeof(*pgmap
));
388 * No 'host' or dax_operations since there is no access to this
389 * device outside of mmap of the resulting character device.
391 dax_dev
= alloc_dax(dev_dax
, NULL
, NULL
);
395 /* a device_dax instance is dead while the driver is not attached */
398 /* from here on we're committed to teardown via dax_dev_release() */
400 device_initialize(dev
);
402 dev_dax
->dax_dev
= dax_dev
;
403 dev_dax
->region
= dax_region
;
404 dev_dax
->target_node
= dax_region
->target_node
;
405 kref_get(&dax_region
->kref
);
407 inode
= dax_inode(dax_dev
);
408 dev
->devt
= inode
->i_rdev
;
409 if (subsys
== DEV_DAX_BUS
)
410 dev
->bus
= &dax_bus_type
;
412 dev
->class = dax_class
;
413 dev
->parent
= parent
;
414 dev
->groups
= dax_attribute_groups
;
415 dev
->release
= dev_dax_release
;
416 dev_set_name(dev
, "dax%d.%d", dax_region
->id
, id
);
418 rc
= device_add(dev
);
420 kill_dev_dax(dev_dax
);
425 rc
= devm_add_action_or_reset(dax_region
->dev
, unregister_dev_dax
, dev
);
436 EXPORT_SYMBOL_GPL(__devm_create_dev_dax
);
438 static int match_always_count
;
440 int __dax_driver_register(struct dax_device_driver
*dax_drv
,
441 struct module
*module
, const char *mod_name
)
443 struct device_driver
*drv
= &dax_drv
->drv
;
446 INIT_LIST_HEAD(&dax_drv
->ids
);
448 drv
->name
= mod_name
;
449 drv
->mod_name
= mod_name
;
450 drv
->bus
= &dax_bus_type
;
452 /* there can only be one default driver */
453 mutex_lock(&dax_bus_lock
);
454 match_always_count
+= dax_drv
->match_always
;
455 if (match_always_count
> 1) {
456 match_always_count
--;
460 mutex_unlock(&dax_bus_lock
);
463 return driver_register(drv
);
465 EXPORT_SYMBOL_GPL(__dax_driver_register
);
467 void dax_driver_unregister(struct dax_device_driver
*dax_drv
)
469 struct device_driver
*drv
= &dax_drv
->drv
;
470 struct dax_id
*dax_id
, *_id
;
472 mutex_lock(&dax_bus_lock
);
473 match_always_count
-= dax_drv
->match_always
;
474 list_for_each_entry_safe(dax_id
, _id
, &dax_drv
->ids
, list
) {
475 list_del(&dax_id
->list
);
478 mutex_unlock(&dax_bus_lock
);
479 driver_unregister(drv
);
481 EXPORT_SYMBOL_GPL(dax_driver_unregister
);
483 int __init
dax_bus_init(void)
487 if (IS_ENABLED(CONFIG_DEV_DAX_PMEM_COMPAT
)) {
488 dax_class
= class_create(THIS_MODULE
, "dax");
489 if (IS_ERR(dax_class
))
490 return PTR_ERR(dax_class
);
493 rc
= bus_register(&dax_bus_type
);
495 class_destroy(dax_class
);
499 void __exit
dax_bus_exit(void)
501 bus_unregister(&dax_bus_type
);
502 class_destroy(dax_class
);