[PATCH 24/28] Driver core: add uevent vars for devices of a class
From: Kay Sievers <[EMAIL PROTECTED]> Devices converted from class_device to device should have the same uevent keys as the original class_device had. We search up the parents until we find the first bus device and add the (already deprecated) PHYDEV* values. Signed-off-by: Kay Sievers <[EMAIL PROTECTED]> Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]> --- drivers/base/core.c | 46 ++ 1 files changed, 34 insertions(+), 12 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index 6fee3e6..7a5336f 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp, "MINOR=%u", MINOR(dev->devt)); } -#ifdef CONFIG_SYSFS_DEPRECATED - /* add bus name (same as SUBSYSTEM, deprecated) */ - if (dev->bus) - add_uevent_var(envp, num_envp, , - buffer, buffer_size, , - "PHYSDEVBUS=%s", dev->bus->name); -#endif - - /* add driver name (PHYSDEV* values are deprecated)*/ - if (dev->driver) { + if (dev->driver) add_uevent_var(envp, num_envp, , buffer, buffer_size, , "DRIVER=%s", dev->driver->name); + #ifdef CONFIG_SYSFS_DEPRECATED + if (dev->class) { + struct device *parent = dev->parent; + + /* find first bus device in parent chain */ + while (parent && !parent->bus) + parent = parent->parent; + if (parent && parent->bus) { + const char *path; + + path = kobject_get_path(>kobj, GFP_KERNEL); + add_uevent_var(envp, num_envp, , + buffer, buffer_size, , + "PHYSDEVPATH=%s", path); + kfree(path); + + add_uevent_var(envp, num_envp, , + buffer, buffer_size, , + "PHYSDEVBUS=%s", parent->bus->name); + + if (parent->driver) + add_uevent_var(envp, num_envp, , + buffer, buffer_size, , + "PHYSDEVDRIVER=%s", parent->driver->name); + } + } else if (dev->bus) { add_uevent_var(envp, num_envp, , buffer, buffer_size, , - "PHYSDEVDRIVER=%s", dev->driver->name); -#endif + "PHYSDEVBUS=%s", dev->bus->name); + + if (dev->driver) + add_uevent_var(envp, num_envp, , + buffer, buffer_size, , + "PHYSDEVDRIVER=%s", dev->driver->name); } +#endif /* terminate, set to next free slot, shrink available space */ envp[i] = NULL; -- 1.4.4.4 - 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/
[PATCH 24/28] Driver core: add uevent vars for devices of a class
From: Kay Sievers [EMAIL PROTECTED] Devices converted from class_device to device should have the same uevent keys as the original class_device had. We search up the parents until we find the first bus device and add the (already deprecated) PHYDEV* values. Signed-off-by: Kay Sievers [EMAIL PROTECTED] Signed-off-by: Greg Kroah-Hartman [EMAIL PROTECTED] --- drivers/base/core.c | 46 ++ 1 files changed, 34 insertions(+), 12 deletions(-) diff --git a/drivers/base/core.c b/drivers/base/core.c index 6fee3e6..7a5336f 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp, MINOR=%u, MINOR(dev-devt)); } -#ifdef CONFIG_SYSFS_DEPRECATED - /* add bus name (same as SUBSYSTEM, deprecated) */ - if (dev-bus) - add_uevent_var(envp, num_envp, i, - buffer, buffer_size, length, - PHYSDEVBUS=%s, dev-bus-name); -#endif - - /* add driver name (PHYSDEV* values are deprecated)*/ - if (dev-driver) { + if (dev-driver) add_uevent_var(envp, num_envp, i, buffer, buffer_size, length, DRIVER=%s, dev-driver-name); + #ifdef CONFIG_SYSFS_DEPRECATED + if (dev-class) { + struct device *parent = dev-parent; + + /* find first bus device in parent chain */ + while (parent !parent-bus) + parent = parent-parent; + if (parent parent-bus) { + const char *path; + + path = kobject_get_path(parent-kobj, GFP_KERNEL); + add_uevent_var(envp, num_envp, i, + buffer, buffer_size, length, + PHYSDEVPATH=%s, path); + kfree(path); + + add_uevent_var(envp, num_envp, i, + buffer, buffer_size, length, + PHYSDEVBUS=%s, parent-bus-name); + + if (parent-driver) + add_uevent_var(envp, num_envp, i, + buffer, buffer_size, length, + PHYSDEVDRIVER=%s, parent-driver-name); + } + } else if (dev-bus) { add_uevent_var(envp, num_envp, i, buffer, buffer_size, length, - PHYSDEVDRIVER=%s, dev-driver-name); -#endif + PHYSDEVBUS=%s, dev-bus-name); + + if (dev-driver) + add_uevent_var(envp, num_envp, i, + buffer, buffer_size, length, + PHYSDEVDRIVER=%s, dev-driver-name); } +#endif /* terminate, set to next free slot, shrink available space */ envp[i] = NULL; -- 1.4.4.4 - 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/