driver core: Add deferred_probe attribute to devices in sysfs
PATCH 1/1 driver core: Add deferred_probe attribute to devices in sysfs
It is sometimes useful to know that a device is on the deferred probe list rather than, say, not having a driver available. Expose this information to user-space.
--- Documentation/ABI/testing/sysfs-devices-deferred_probe | 12 ++++++++++++ drivers/base/base.h | 2 ++ drivers/base/core.c | 7 +++++++ drivers/base/dd.c | 13 +++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-devices-deferred_probe
Documentation/ABI/testing/sysfs-devices-deferred_probe new file +12 -0
@@ -0,0 +1,12 @@ +What: /sys/devices/.../deferred_probe +Date: August 2016 +Contact: Ben Hutchings <[email protected]> +Description: + The /sys/devices/.../deferred_probe attribute is + present for all devices. If a driver detects during + probing a device that a related device is not yet + ready, it may defer probing of the first device. The + kernel will retry probing the first device after any + other device is successfully probed. This attribute + reads as 1 if probing of this device is currently + deferred, or 0 otherwise.
drivers/base/base.h +2 -0
@@ -138,6 +138,8 @@ extern void device_unblock_probing(void);extern struct kset *devices_kset;extern void devices_kset_move_last (struct device *dev); +extern struct device_attribute dev_attr_deferred_probe; +#if defined(CONFIG_MODULES ) && defined(CONFIG_SYSFS )extern void module_add_driver (struct module *mod,struct device_driver *drv);extern void module_remove_driver (struct device_driver *drv);
drivers/base/core.c +7 -0
@@ -494,8 +494,14 @@ static int device_add_attrs(struct device *dev) goto err_remove_dev_groups; } + error =device_create_file (dev, &dev_attr_deferred_probe); +if (error) + goto err_remove_online; +return 0 ; + err_remove_online: +device_remove_file (dev, &dev_attr_online); err_remove_dev_groups:device_remove_groups (dev, dev->groups); err_remove_type_groups:
@@ -513,6 +519,7 @@ static void device_remove_attrs(struct device *dev)struct class *class = dev->class;const struct device_type *type = dev->type; +device_remove_file (dev, &dev_attr_deferred_probe);device_remove_file (dev, &dev_attr_online);device_remove_groups (dev, dev->groups);
drivers/base/dd.c +13 -0
@@ -54,6 +54,19 @@ static LIST_HEAD(deferred_probe_active_list);static struct workqueue_struct *deferred_wq;static atomic_t deferred_trigger_count =ATOMIC_INIT (0 ); +static ssize_t deferred_probe_show (struct device *dev, +struct device_attribute *attr,char *buf) +{ +bool value; + +mutex_lock (&deferred_probe_mutex); + value = !list_empty (&dev->p->deferred_probe); +mutex_unlock (&deferred_probe_mutex); + +return sprintf (buf,"%d\n" , value); +} +DEVICE_ATTR_RO (deferred_probe); +/* * In some cases, like suspend to RAM or hibernation, It might be reasonable * to prohibit probing of devices as it could be unsafe.
Signature · 6 lines
2.8.1 -- Ben Hutchings Software Developer, Codethink Ltd.
Greg Kroah-Hartman
maintainerQuoted 3 lines · Ben Hutchings
It is sometimes useful to know that a device is on the deferred probe list rather than, say, not having a driver available. Expose this information to user-space.
What can someone use this for? It's an attribute that for 99.9% of the time will always be the same value.
I can see when debugging it might be nice, but what can a user do with this?
thanks,
greg k-h
Quoted 10 lines · Greg Kroah-Hartman
Quoted 3 lines · Ben Hutchings
It is sometimes useful to know that a device is on the deferred probe list rather than, say, not having a driver available. Expose this information to user-space.
What can someone use this for? It's an attribute that for 99.9% of the time will always be the same value.
I can see when debugging it might be nice, but what can a user do with this?
Yes this is mostly for debugging. (Like many of the attributes in sysfs.)
Ben.
Signature · 2 lines
Ben Hutchings Software Developer, Codethink Ltd.