From: "John W. Linville" <linville@tuxdriver.com>

Since e1000 is using work queues, we need to call flush_scheduled_work()
before removing the driver from memory.  Otherwise, we are prone to an
Oops.

Acked-by: Ganesh Venkatesan <ganesh.venkatesan@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/net/e1000/e1000_main.c |    2 ++
 1 files changed, 2 insertions(+)

diff -puN drivers/net/e1000/e1000_main.c~e1000-flush-work-queues-on-remove drivers/net/e1000/e1000_main.c
--- 25/drivers/net/e1000/e1000_main.c~e1000-flush-work-queues-on-remove	2005-03-23 00:59:42.000000000 -0800
+++ 25-akpm/drivers/net/e1000/e1000_main.c	2005-03-23 00:59:42.000000000 -0800
@@ -660,6 +660,8 @@ e1000_remove(struct pci_dev *pdev)
 	struct e1000_adapter *adapter = netdev->priv;
 	uint32_t manc;
 
+	flush_scheduled_work();
+
 	if(adapter->hw.mac_type >= e1000_82540 &&
 	   adapter->hw.media_type == e1000_media_type_copper) {
 		manc = E1000_READ_REG(&adapter->hw, MANC);
_