This patch prevents switch-robo.c from attempting robo_probe on a port
that is already registered. robo_probe will adjust kernel reference counts
if it detects a switch on the port. If this patch wasn't applied, the
wrt350n would hang on reboot, waiting for the network driver reference count
to reach zero indefinitely.
Signed-off-by: Ben Pfountz <netprince (at) vt (dot) edu>
diff -urN --exclude=.svn package.nohack/switch/src/switch-core.c
package/switch/src/switch-core.c
--- package.nohack/switch/src/switch-core.c 2008-06-10 12:23:45.000000000
-0400
+++ package/switch/src/switch-core.c 2008-06-10 13:11:35.000000000 -0400
@@ -404,6 +404,21 @@
}
+int switch_device_registered (char* device) {
+ struct list_head *pos;
+ switch_driver *new;
+
+ list_for_each(pos, &drivers.list) {
+ if (strcmp(list_entry(pos, switch_driver, list)->interface,
device) == 0) {
+ printk("There is already a switch registered on the
device '%s'\n", device);
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+
int switch_register_driver(switch_driver *driver)
{
struct list_head *pos;
@@ -476,6 +491,7 @@
MODULE_AUTHOR("Felix Fietkau <[EMAIL PROTECTED]>");
MODULE_LICENSE("GPL");
+EXPORT_SYMBOL(switch_device_registered);
EXPORT_SYMBOL(switch_register_driver);
EXPORT_SYMBOL(switch_unregister_driver);
EXPORT_SYMBOL(switch_parse_vlan);
Binary files package.nohack/switch/src/.switch-core.c.swp and
package/switch/src/.switch-core.c.swp differ
diff -urN --exclude=.svn package.nohack/switch/src/switch-core.h
package/switch/src/switch-core.h
--- package.nohack/switch/src/switch-core.h 2008-06-10 12:23:45.000000000
-0400
+++ package/switch/src/switch-core.h 2008-06-10 12:33:53.000000000 -0400
@@ -42,6 +42,7 @@
} switch_vlan_config;
+extern int switch_device_registered (char* device);
extern int switch_register_driver(switch_driver *driver);
extern void switch_unregister_driver(char *name);
extern switch_vlan_config *switch_parse_vlan(switch_driver *driver, char *buf);
diff -urN --exclude=.svn package.nohack/switch/src/switch-robo.c
package/switch/src/switch-robo.c
--- package.nohack/switch/src/switch-robo.c 2008-06-10 12:23:45.000000000
-0400
+++ package/switch/src/switch-robo.c 2008-06-10 12:30:55.000000000 -0400
@@ -528,7 +528,8 @@
device = strdup("ethX");
for (device[3] = '0'; (device[3] <= '3') && notfound; device[3]++) {
- notfound = robo_probe(device);
+ if (! switch_device_registered (device))
+ notfound = robo_probe(device);
}
device[3]--;
_______________________________________________
openwrt-devel mailing list
[email protected]
http://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel