summaryrefslogtreecommitdiff
path: root/packages/ixp425-eth/ixp400-eth-1.5.1/stop-on-rmmod.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/ixp425-eth/ixp400-eth-1.5.1/stop-on-rmmod.patch')
-rw-r--r--packages/ixp425-eth/ixp400-eth-1.5.1/stop-on-rmmod.patch29
1 files changed, 29 insertions, 0 deletions
diff --git a/packages/ixp425-eth/ixp400-eth-1.5.1/stop-on-rmmod.patch b/packages/ixp425-eth/ixp400-eth-1.5.1/stop-on-rmmod.patch
new file mode 100644
index 0000000000..2ddc98938a
--- /dev/null
+++ b/packages/ixp425-eth/ixp400-eth-1.5.1/stop-on-rmmod.patch
@@ -0,0 +1,29 @@
+devices must be explicitely stopped when
+the driver is going do be removed, otherwise
+it will simply hang.
+
+ ixp400_eth.c | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+--- ixp400-eth/ixp400_eth.c 1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c 1970-01-01 00:00:00.000000000 +0000
+@@ -3800,9 +3800,16 @@ void __exit ixp400_eth_exit(void)
+
+ TRACE;
+
+- /* We can only get here when the module use count is 0,
+- * so there's no need to stop devices.
+- */
++ /* stop devices */
++
++#if IS_KERNEL26
++ for (dev_count = 0;
++ dev_count < dev_max_count; /* module parameter */
++ dev_count++)
++ {
++ do_dev_stop(platform_get_drvdata(&ixp400_eth_devices[dev_count]));
++ }
++#endif
+
+ if (no_ixp400_sw_init == 0) /* module parameter */
+ {