summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/base/driver.c24
-rw-r--r--drivers/net/iseries_veth.c2
-rw-r--r--include/linux/device.h4
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 *));