driver core: move klist_children into private structure
Nothing outside of the driver core should ever touch klist_children, or knode_parent, so move them out of the public eye. Cc: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
		
					parent
					
						
							
								2831fe6f9c
							
						
					
				
			
			
				commit
				
					
						11c3b5c3e0
					
				
			
		
					 3 changed files with 30 additions and 15 deletions
				
			
		| 
						 | 
					@ -66,14 +66,20 @@ struct class_private {
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * struct device_private - structure to hold the private to the driver core portions of the device structure.
 | 
					 * struct device_private - structure to hold the private to the driver core portions of the device structure.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * @klist_children - klist containing all children of this device
 | 
				
			||||||
 | 
					 * @knode_parent - node in sibling list
 | 
				
			||||||
 * @device - pointer back to the struct class that this structure is
 | 
					 * @device - pointer back to the struct class that this structure is
 | 
				
			||||||
 * associated with.
 | 
					 * associated with.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * Nothing outside of the driver core should ever touch these fields.
 | 
					 * Nothing outside of the driver core should ever touch these fields.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
struct device_private {
 | 
					struct device_private {
 | 
				
			||||||
 | 
						struct klist klist_children;
 | 
				
			||||||
 | 
						struct klist_node knode_parent;
 | 
				
			||||||
	struct device *device;
 | 
						struct device *device;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					#define to_device_private_parent(obj)	\
 | 
				
			||||||
 | 
						container_of(obj, struct device_private, knode_parent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* initialisation functions */
 | 
					/* initialisation functions */
 | 
				
			||||||
extern int devices_init(void);
 | 
					extern int devices_init(void);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -509,14 +509,16 @@ EXPORT_SYMBOL_GPL(device_schedule_callback_owner);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void klist_children_get(struct klist_node *n)
 | 
					static void klist_children_get(struct klist_node *n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct device *dev = container_of(n, struct device, knode_parent);
 | 
						struct device_private *p = to_device_private_parent(n);
 | 
				
			||||||
 | 
						struct device *dev = p->device;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	get_device(dev);
 | 
						get_device(dev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void klist_children_put(struct klist_node *n)
 | 
					static void klist_children_put(struct klist_node *n)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct device *dev = container_of(n, struct device, knode_parent);
 | 
						struct device_private *p = to_device_private_parent(n);
 | 
				
			||||||
 | 
						struct device *dev = p->device;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	put_device(dev);
 | 
						put_device(dev);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -546,7 +548,7 @@ void device_initialize(struct device *dev)
 | 
				
			||||||
	dev->p->device = dev;
 | 
						dev->p->device = dev;
 | 
				
			||||||
	dev->kobj.kset = devices_kset;
 | 
						dev->kobj.kset = devices_kset;
 | 
				
			||||||
	kobject_init(&dev->kobj, &device_ktype);
 | 
						kobject_init(&dev->kobj, &device_ktype);
 | 
				
			||||||
	klist_init(&dev->klist_children, klist_children_get,
 | 
						klist_init(&dev->p->klist_children, klist_children_get,
 | 
				
			||||||
		   klist_children_put);
 | 
							   klist_children_put);
 | 
				
			||||||
	INIT_LIST_HEAD(&dev->dma_pools);
 | 
						INIT_LIST_HEAD(&dev->dma_pools);
 | 
				
			||||||
	init_MUTEX(&dev->sem);
 | 
						init_MUTEX(&dev->sem);
 | 
				
			||||||
| 
						 | 
					@ -927,7 +929,8 @@ int device_add(struct device *dev)
 | 
				
			||||||
	kobject_uevent(&dev->kobj, KOBJ_ADD);
 | 
						kobject_uevent(&dev->kobj, KOBJ_ADD);
 | 
				
			||||||
	bus_attach_device(dev);
 | 
						bus_attach_device(dev);
 | 
				
			||||||
	if (parent)
 | 
						if (parent)
 | 
				
			||||||
		klist_add_tail(&dev->knode_parent, &parent->klist_children);
 | 
							klist_add_tail(&dev->p->knode_parent,
 | 
				
			||||||
 | 
								       &parent->p->klist_children);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (dev->class) {
 | 
						if (dev->class) {
 | 
				
			||||||
		mutex_lock(&dev->class->p->class_mutex);
 | 
							mutex_lock(&dev->class->p->class_mutex);
 | 
				
			||||||
| 
						 | 
					@ -1038,7 +1041,7 @@ void device_del(struct device *dev)
 | 
				
			||||||
	device_pm_remove(dev);
 | 
						device_pm_remove(dev);
 | 
				
			||||||
	dpm_sysfs_remove(dev);
 | 
						dpm_sysfs_remove(dev);
 | 
				
			||||||
	if (parent)
 | 
						if (parent)
 | 
				
			||||||
		klist_del(&dev->knode_parent);
 | 
							klist_del(&dev->p->knode_parent);
 | 
				
			||||||
	if (MAJOR(dev->devt)) {
 | 
						if (MAJOR(dev->devt)) {
 | 
				
			||||||
		device_remove_sys_dev_entry(dev);
 | 
							device_remove_sys_dev_entry(dev);
 | 
				
			||||||
		device_remove_file(dev, &devt_attr);
 | 
							device_remove_file(dev, &devt_attr);
 | 
				
			||||||
| 
						 | 
					@ -1102,7 +1105,14 @@ void device_unregister(struct device *dev)
 | 
				
			||||||
static struct device *next_device(struct klist_iter *i)
 | 
					static struct device *next_device(struct klist_iter *i)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct klist_node *n = klist_next(i);
 | 
						struct klist_node *n = klist_next(i);
 | 
				
			||||||
	return n ? container_of(n, struct device, knode_parent) : NULL;
 | 
						struct device *dev = NULL;
 | 
				
			||||||
 | 
						struct device_private *p;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (n) {
 | 
				
			||||||
 | 
							p = to_device_private_parent(n);
 | 
				
			||||||
 | 
							dev = p->device;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return dev;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
| 
						 | 
					@ -1124,7 +1134,7 @@ int device_for_each_child(struct device *parent, void *data,
 | 
				
			||||||
	struct device *child;
 | 
						struct device *child;
 | 
				
			||||||
	int error = 0;
 | 
						int error = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	klist_iter_init(&parent->klist_children, &i);
 | 
						klist_iter_init(&parent->p->klist_children, &i);
 | 
				
			||||||
	while ((child = next_device(&i)) && !error)
 | 
						while ((child = next_device(&i)) && !error)
 | 
				
			||||||
		error = fn(child, data);
 | 
							error = fn(child, data);
 | 
				
			||||||
	klist_iter_exit(&i);
 | 
						klist_iter_exit(&i);
 | 
				
			||||||
| 
						 | 
					@ -1155,7 +1165,7 @@ struct device *device_find_child(struct device *parent, void *data,
 | 
				
			||||||
	if (!parent)
 | 
						if (!parent)
 | 
				
			||||||
		return NULL;
 | 
							return NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	klist_iter_init(&parent->klist_children, &i);
 | 
						klist_iter_init(&parent->p->klist_children, &i);
 | 
				
			||||||
	while ((child = next_device(&i)))
 | 
						while ((child = next_device(&i)))
 | 
				
			||||||
		if (match(child, data) && get_device(child))
 | 
							if (match(child, data) && get_device(child))
 | 
				
			||||||
			break;
 | 
								break;
 | 
				
			||||||
| 
						 | 
					@ -1478,9 +1488,10 @@ int device_move(struct device *dev, struct device *new_parent)
 | 
				
			||||||
	old_parent = dev->parent;
 | 
						old_parent = dev->parent;
 | 
				
			||||||
	dev->parent = new_parent;
 | 
						dev->parent = new_parent;
 | 
				
			||||||
	if (old_parent)
 | 
						if (old_parent)
 | 
				
			||||||
		klist_remove(&dev->knode_parent);
 | 
							klist_remove(&dev->p->knode_parent);
 | 
				
			||||||
	if (new_parent) {
 | 
						if (new_parent) {
 | 
				
			||||||
		klist_add_tail(&dev->knode_parent, &new_parent->klist_children);
 | 
							klist_add_tail(&dev->p->knode_parent,
 | 
				
			||||||
 | 
								       &new_parent->p->klist_children);
 | 
				
			||||||
		set_dev_node(dev, dev_to_node(new_parent));
 | 
							set_dev_node(dev, dev_to_node(new_parent));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1492,11 +1503,11 @@ int device_move(struct device *dev, struct device *new_parent)
 | 
				
			||||||
		device_move_class_links(dev, new_parent, old_parent);
 | 
							device_move_class_links(dev, new_parent, old_parent);
 | 
				
			||||||
		if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
 | 
							if (!kobject_move(&dev->kobj, &old_parent->kobj)) {
 | 
				
			||||||
			if (new_parent)
 | 
								if (new_parent)
 | 
				
			||||||
				klist_remove(&dev->knode_parent);
 | 
									klist_remove(&dev->p->knode_parent);
 | 
				
			||||||
			dev->parent = old_parent;
 | 
								dev->parent = old_parent;
 | 
				
			||||||
			if (old_parent) {
 | 
								if (old_parent) {
 | 
				
			||||||
				klist_add_tail(&dev->knode_parent,
 | 
									klist_add_tail(&dev->p->knode_parent,
 | 
				
			||||||
					       &old_parent->klist_children);
 | 
										       &old_parent->p->klist_children);
 | 
				
			||||||
				set_dev_node(dev, dev_to_node(old_parent));
 | 
									set_dev_node(dev, dev_to_node(old_parent));
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -366,8 +366,6 @@ struct device_dma_parameters {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct device {
 | 
					struct device {
 | 
				
			||||||
	struct klist		klist_children;
 | 
					 | 
				
			||||||
	struct klist_node	knode_parent;	/* node in sibling list */
 | 
					 | 
				
			||||||
	struct klist_node	knode_driver;
 | 
						struct klist_node	knode_driver;
 | 
				
			||||||
	struct klist_node	knode_bus;
 | 
						struct klist_node	knode_bus;
 | 
				
			||||||
	struct device		*parent;
 | 
						struct device		*parent;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue