diff options
| -rw-r--r-- | drivers/base/driver.c | 24 | ||||
| -rw-r--r-- | drivers/net/iseries_veth.c | 2 | ||||
| -rw-r--r-- | include/linux/device.h | 4 | 
3 files changed, 29 insertions, 1 deletions
diff --git a/drivers/base/driver.c b/drivers/base/driver.c index e3b58407fed..633ae1d70e1 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c @@ -124,6 +124,30 @@ void driver_remove_file(struct device_driver * drv, struct driver_attribute * at  /** + * driver_add_kobj - add a kobject below the specified driver + * + * You really don't want to do this, this is only here due to one looney + * iseries driver, go poke those developers if you are annoyed about + * this... + */ +int driver_add_kobj(struct device_driver *drv, struct kobject *kobj, +		    const char *fmt, ...) +{ +	va_list args; +	char *name; + +	va_start(args, fmt); +	name = kvasprintf(GFP_KERNEL, fmt, args); +	va_end(args); + +	if (!name) +		return -ENOMEM; + +	return kobject_add_ng(kobj, &drv->kobj, "%s", name); +} +EXPORT_SYMBOL_GPL(driver_add_kobj); + +/**   *	get_driver - increment driver reference count.   *	@drv:	driver.   */ diff --git a/drivers/net/iseries_veth.c b/drivers/net/iseries_veth.c index 90ff4ec5f6f..1a8299acd3f 100644 --- a/drivers/net/iseries_veth.c +++ b/drivers/net/iseries_veth.c @@ -1705,7 +1705,7 @@ static int __init veth_module_init(void)  		kobj = &veth_cnx[i]->kobject;  		/* If the add failes, complain but otherwise continue */ -		if (0 != kobject_add_ng(kobj, &veth_driver.driver.kobj, +		if (0 != driver_add_kobj(&veth_driver.driver, kobj,  					"cnx%.2d", veth_cnx[i]->remote_lp))  			veth_error("cnx %d: Failed adding to sysfs.\n", i);  	} diff --git a/include/linux/device.h b/include/linux/device.h index d974dda4aa5..721ee318d57 100644 --- a/include/linux/device.h +++ b/include/linux/device.h @@ -156,6 +156,10 @@ extern int __must_check driver_create_file(struct device_driver *,  					struct driver_attribute *);  extern void driver_remove_file(struct device_driver *, struct driver_attribute *); +extern int __must_check driver_add_kobj(struct device_driver *drv, +					struct kobject *kobj, +					const char *fmt, ...); +  extern int __must_check driver_for_each_device(struct device_driver * drv,  		struct device *start, void *data,  		int (*fn)(struct device *, void *));  |