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 */ {