From: Kay Sievers <[email protected]> This allows sysfs to show the environment variables that are available if the uevent happens. This lets userspace not have to cache all of this information as the kernel already knows it. Signed-off-by: Kay Sievers <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]> --- drivers/base/core.c | 50 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 49 insertions(+), 1 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index c34a4d8..72c6ee5 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -246,6 +246,53 @@ static struct kset_uevent_ops device_uevent_ops = { .uevent = dev_uevent, }; +static ssize_t show_uevent(struct device *dev, struct device_attribute *attr, + char *buf) +{ + struct kobject *top_kobj; + struct kset *kset; + char *envp[32]; + char data[PAGE_SIZE]; + char *pos; + int i; + size_t count = 0; + int retval; + + /* search the kset, the device belongs to */ + top_kobj = &dev->kobj; + if (!top_kobj->kset && top_kobj->parent) { + do { + top_kobj = top_kobj->parent; + } while (!top_kobj->kset && top_kobj->parent); + } + if (!top_kobj->kset) + goto out; + kset = top_kobj->kset; + if (!kset->uevent_ops || !kset->uevent_ops->uevent) + goto out; + + /* respect filter */ + if (kset->uevent_ops && kset->uevent_ops->filter) + if (!kset->uevent_ops->filter(kset, &dev->kobj)) + goto out; + + /* let the kset specific function add its keys */ + pos = data; + retval = kset->uevent_ops->uevent(kset, &dev->kobj, + envp, ARRAY_SIZE(envp), + pos, PAGE_SIZE); + if (retval) + goto out; + + /* copy keys to file */ + for (i = 0; envp[i]; i++) { + pos = &buf[count]; + count += sprintf(pos, "%s\n", envp[i]); + } +out: + return count; +} + static ssize_t store_uevent(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { @@ -621,10 +668,11 @@ int device_add(struct device *dev) BUS_NOTIFY_ADD_DEVICE, dev); dev->uevent_attr.attr.name = "uevent"; - dev->uevent_attr.attr.mode = S_IWUSR; + dev->uevent_attr.attr.mode = S_IRUGO | S_IWUSR; if (dev->driver) dev->uevent_attr.attr.owner = dev->driver->owner; dev->uevent_attr.store = store_uevent; + dev->uevent_attr.show = show_uevent; error = device_create_file(dev, &dev->uevent_attr); if (error) goto attrError; -- 1.5.1.2 - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
- Follow-Ups:
- [PATCH 32/46] Driver core: warn when userspace writes to the uevent file in a non-supported way
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 32/46] Driver core: warn when userspace writes to the uevent file in a non-supported way
- References:
- [GIT PATCH] Driver core patches for 2.6.21
- From: Greg KH <[email protected]>
- [PATCH 01/46] driver core: fix device_add error path
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 02/46] driver core: fix namespace issue with devices assigned to classes
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 03/46] dev_printk and new-style class devices
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 05/46] driver core: Use attribute groups in struct device_type
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 06/46] Driver core: add name to device_type
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 07/46] kobject: kobject_shadow_add cleanup
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 08/46] driver core: per-subsystem multithreaded probing
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 09/46] powerpc: make it compile for multithread change
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 10/46] driver core: don't fail attaching the device if it cannot be bound
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 11/46] Driver core: remove unneeded completion from driver release path
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 12/46] kref: fix CPU ordering with respect to krefs
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 13/46] Driver core: notify userspace of network device renames
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 14/46] Driver core: suppress uevents via filter
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 15/46] Driver core: switch firmware_class to uevent_suppress.
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 16/46] uevent: use add_uevent_var() instead of open coding it
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 17/46] Driver core: add suspend() and resume() to struct device_type
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 18/46] Kobject: kobject_uevent.c: Collapse unnecessary loop nesting (top_kobj)
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 19/46] kobject: kobject_add() reference leak
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 20/46] Driver core: remove use of rwsem
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 21/46] SCSI: use the proper semaphore to protect the class lists
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 22/46] USB: remove use of the bus rwsem, as it doesn't really protect anything.
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 23/46] PNP: stop using the subsystem rwsem
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 24/46] Input: serio - do not touch bus's rwsem
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 25/46] Input: gameport - do not touch bus's rwsem
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 26/46] IDE: remove rwsem use from ide-proc core
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 27/46] IEEE1394: remove rwsem use from ieee1394 core
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 28/46] PHY: remove rwsem use from phy core
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 29/46] qeth: Remove usage of subsys.rwsem
- From: Greg Kroah-Hartman <[email protected]>
- [PATCH 30/46] kobject core: remove rwsem from struct subsystem
- From: Greg Kroah-Hartman <[email protected]>
- [GIT PATCH] Driver core patches for 2.6.21
- Prev by Date: [PATCH 37/46] Driver core: use mutex instead of semaphore in DMA pool handler
- Next by Date: [PATCH 21/46] SCSI: use the proper semaphore to protect the class lists
- Previous by thread: [PATCH 30/46] kobject core: remove rwsem from struct subsystem
- Next by thread: [PATCH 32/46] Driver core: warn when userspace writes to the uevent file in a non-supported way
- Index(es):