[PATCH] allow to register interfaces after devices

From: Martin Waitz (tali@admingilde.org)
Date: Tue Nov 26 2002 - 16:22:39 EST


hi :)

i had a problem some of my code that registered a interface for cpu_devclass
was being run after cpu devices got added to the class.

current code only adds those devices to the interface that are
added after registering the interface.
this patch changes it by walking all devices that are already registered
to intf->devclass.

--- linux-2.5/drivers/base/intf.c 2002-11-26 21:41:00.000000000 +0100
+++ linux/drivers/base/intf.c 2002-11-26 21:41:00.000000000 +0100
@@ -35,17 +35,36 @@
 int interface_register(struct device_interface * intf)
 {
        struct device_class * cls = get_devclass(intf->devclass);
- int error = 0;
+ struct list_head * drv_node;
+
+ if (!cls) {
+ return -EINVAL;
+ }
 
- if (cls) {
- pr_debug("register interface '%s' with class '%s'\n",
- intf->name,cls->name);
- strncpy(intf->kobj.name,intf->name,KOBJ_NAME_LEN);
- intf->kobj.subsys = &cls->subsys;
- kobject_register(&intf->kobj);
- } else
- error = -EINVAL;
- return error;
+ pr_debug("register interface '%s' with class '%s'\n",
+ intf->name,cls->name);
+ strncpy(intf->kobj.name,intf->name,KOBJ_NAME_LEN);
+ intf->kobj.subsys = &cls->subsys;
+ kobject_register(&intf->kobj);
+
+ /* walk all devices already registered to intf->devclass */
+ list_for_each(drv_node, &cls->drivers) {
+ struct device_driver * driver =
+ container_of(drv_node,struct device_driver,class_list);
+ struct list_head * dev_node;
+
+ list_for_each(dev_node, &driver->devices) {
+ int error;
+ struct device * dev =
+ container_of(dev_node,struct device,driver_list);
+ error = intf->add_device(dev);
+ if (error)
+ pr_debug("%s:%s: adding '%s' failed: %d\n",
+ cls->name,intf->name,dev->name,error);
+ }
+ }
+
+ return 0;
 }
 
 void interface_unregister(struct device_interface * intf)

-- 
CU,		  / Friedrich-Alexander University Erlangen, Germany
Martin Waitz	//  [Tali on IRCnet]  [tali.home.pages.de] _________
______________/// - - - - - - - - - - - - - - - - - - - - ///
dies ist eine manuell generierte mail, sie beinhaltet    //
tippfehler und ist auch ohne grossbuchstaben gueltig.   /
			    -
Wer bereit ist, grundlegende Freiheiten aufzugeben, um sich 
kurzfristige Sicherheit zu verschaffen, der hat weder Freiheit 
noch Sicherheit verdient.
			Benjamin Franklin  (1706 - 1790)


- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sat Nov 30 2002 - 22:00:15 EST