Commit cbe9c595 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files

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: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 23b9c1ab
Loading
Loading
Loading
Loading
+24 −0
Original line number Diff line number Diff line
@@ -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.
+1 −1
Original line number Diff line number Diff line
@@ -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);
	}
+4 −0
Original line number Diff line number Diff line
@@ -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 *));