forked from Minki/linux
Driver: add driver_add_kobj for looney iseries_veth driver
The iseries driver wants to hang kobjects off of its driver, so, to preserve backwards compatibility, we need to add a call to the driver core to allow future changes to work properly. Hopefully no one uses this function in the future and the iseries_veth driver authors come to their senses so I can remove this hack... Cc: Dave Larson <larson1@us.ibm.com> Cc: Santiago Leon <santil@us.ibm.com> Cc: Kay Sievers <kay.sievers@vrfy.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
23b9c1ab5b
commit
cbe9c595f1
@ -123,6 +123,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.
|
* get_driver - increment driver reference count.
|
||||||
* @drv: driver.
|
* @drv: driver.
|
||||||
|
@ -1705,7 +1705,7 @@ static int __init veth_module_init(void)
|
|||||||
|
|
||||||
kobj = &veth_cnx[i]->kobject;
|
kobj = &veth_cnx[i]->kobject;
|
||||||
/* If the add failes, complain but otherwise continue */
|
/* 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))
|
"cnx%.2d", veth_cnx[i]->remote_lp))
|
||||||
veth_error("cnx %d: Failed adding to sysfs.\n", i);
|
veth_error("cnx %d: Failed adding to sysfs.\n", i);
|
||||||
}
|
}
|
||||||
|
@ -156,6 +156,10 @@ extern int __must_check driver_create_file(struct device_driver *,
|
|||||||
struct driver_attribute *);
|
struct driver_attribute *);
|
||||||
extern void driver_remove_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,
|
extern int __must_check driver_for_each_device(struct device_driver * drv,
|
||||||
struct device *start, void *data,
|
struct device *start, void *data,
|
||||||
int (*fn)(struct device *, void *));
|
int (*fn)(struct device *, void *));
|
||||||
|
Loading…
Reference in New Issue
Block a user