Skip to content

Commit

Permalink
Driver: add driver_add_kobj for looney iseries_veth driver
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Greg Kroah-Hartman committed Jan 25, 2008
1 parent 23b9c1a commit cbe9c59
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
24 changes: 24 additions & 0 deletions drivers/base/driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -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.
* @drv: driver.
Expand Down
2 changes: 1 addition & 1 deletion drivers/net/iseries_veth.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand Down
4 changes: 4 additions & 0 deletions include/linux/device.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 *));
Expand Down

0 comments on commit cbe9c59

Please sign in to comment.