Skip to content

Commit 239378f

Browse files
Kay Sieversgregkh
authored andcommitted
Driver core: add uevent vars for devices of a class
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]>
1 parent bf0acc3 commit 239378f

File tree

1 file changed

+34
-12
lines changed

1 file changed

+34
-12
lines changed

drivers/base/core.c

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
154154
"MINOR=%u", MINOR(dev->devt));
155155
}
156156

157-
#ifdef CONFIG_SYSFS_DEPRECATED
158-
/* add bus name (same as SUBSYSTEM, deprecated) */
159-
if (dev->bus)
160-
add_uevent_var(envp, num_envp, &i,
161-
buffer, buffer_size, &length,
162-
"PHYSDEVBUS=%s", dev->bus->name);
163-
#endif
164-
165-
/* add driver name (PHYSDEV* values are deprecated)*/
166-
if (dev->driver) {
157+
if (dev->driver)
167158
add_uevent_var(envp, num_envp, &i,
168159
buffer, buffer_size, &length,
169160
"DRIVER=%s", dev->driver->name);
161+
170162
#ifdef CONFIG_SYSFS_DEPRECATED
163+
if (dev->class) {
164+
struct device *parent = dev->parent;
165+
166+
/* find first bus device in parent chain */
167+
while (parent && !parent->bus)
168+
parent = parent->parent;
169+
if (parent && parent->bus) {
170+
const char *path;
171+
172+
path = kobject_get_path(&parent->kobj, GFP_KERNEL);
173+
add_uevent_var(envp, num_envp, &i,
174+
buffer, buffer_size, &length,
175+
"PHYSDEVPATH=%s", path);
176+
kfree(path);
177+
178+
add_uevent_var(envp, num_envp, &i,
179+
buffer, buffer_size, &length,
180+
"PHYSDEVBUS=%s", parent->bus->name);
181+
182+
if (parent->driver)
183+
add_uevent_var(envp, num_envp, &i,
184+
buffer, buffer_size, &length,
185+
"PHYSDEVDRIVER=%s", parent->driver->name);
186+
}
187+
} else if (dev->bus) {
171188
add_uevent_var(envp, num_envp, &i,
172189
buffer, buffer_size, &length,
173-
"PHYSDEVDRIVER=%s", dev->driver->name);
174-
#endif
190+
"PHYSDEVBUS=%s", dev->bus->name);
191+
192+
if (dev->driver)
193+
add_uevent_var(envp, num_envp, &i,
194+
buffer, buffer_size, &length,
195+
"PHYSDEVDRIVER=%s", dev->driver->name);
175196
}
197+
#endif
176198

177199
/* terminate, set to next free slot, shrink available space */
178200
envp[i] = NULL;

0 commit comments

Comments
 (0)