forked from mirrors/linux
		
	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 <kay.sievers@novell.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
							parent
							
								
									bf0acc3302
								
							
						
					
					
						commit
						239378f16a
					
				
					 1 changed files with 34 additions and 12 deletions
				
			
		|  | @ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp, | ||||||
| 			       "MINOR=%u", MINOR(dev->devt)); | 			       "MINOR=%u", MINOR(dev->devt)); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| #ifdef CONFIG_SYSFS_DEPRECATED | 	if (dev->driver) | ||||||
| 	/* 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) { |  | ||||||
| 		add_uevent_var(envp, num_envp, &i, | 		add_uevent_var(envp, num_envp, &i, | ||||||
| 			       buffer, buffer_size, &length, | 			       buffer, buffer_size, &length, | ||||||
| 			       "DRIVER=%s", dev->driver->name); | 			       "DRIVER=%s", dev->driver->name); | ||||||
|  | 
 | ||||||
| #ifdef CONFIG_SYSFS_DEPRECATED | #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, | 		add_uevent_var(envp, num_envp, &i, | ||||||
| 			       buffer, buffer_size, &length, | 			       buffer, buffer_size, &length, | ||||||
| 			       "PHYSDEVDRIVER=%s", dev->driver->name); | 			       "PHYSDEVBUS=%s", dev->bus->name); | ||||||
| #endif | 
 | ||||||
|  | 		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 */ | 	/* terminate, set to next free slot, shrink available space */ | ||||||
| 	envp[i] = NULL; | 	envp[i] = NULL; | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Kay Sievers
						Kay Sievers