Signed-off-by: Joonwoo Park <joonwpark81 at gmail.com> 
---
 drivers/e1000-7.x/src/e1000_main.c |    7 +++++++
 elements/linuxmodule/anydevice.hh  |    5 +++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/e1000-7.x/src/e1000_main.c b/drivers/e1000-7.x/src/e1000_main.c
index 2a3c5f0..95cca7f 100644
--- a/drivers/e1000-7.x/src/e1000_main.c
+++ b/drivers/e1000-7.x/src/e1000_main.c
@@ -745,6 +745,12 @@ e1000_reinit_locked(struct e1000_adapter *adapter)
 	e1000_down(adapter);
 	e1000_up(adapter);
 	clear_bit(__E1000_RESETTING, &adapter->flags);
+
+	if (adapter->netdev->polling) {
+		mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
+		mod_timer(&adapter->watchdog_timer, jiffies + 1);
+		mod_timer(&adapter->phy_info_timer, jiffies + 1);
+	}
 }
 
 void
@@ -5780,6 +5786,7 @@ e1000_tx_pqueue(struct net_device *netdev, struct sk_buff *skb)
   if(E1000_DESC_UNUSED(adapter->tx_ring) <= (txd_needed + 1)) {
     adapter->net_stats.tx_dropped++;
     netif_stop_queue(netdev);
+    mod_timer(&adapter->tx_fifo_stall_timer, jiffies + 1);
     return -1;
   }
 
diff --git a/elements/linuxmodule/anydevice.hh b/elements/linuxmodule/anydevice.hh
index 84eb658..16ee738 100644
--- a/elements/linuxmodule/anydevice.hh
+++ b/elements/linuxmodule/anydevice.hh
@@ -173,6 +173,7 @@ class AnyDeviceMap { public:
     AnyDevice *_unknown_map;
     AnyDevice *_map[MAP_SIZE];
     rwlock_t _lock;
+    unsigned long _flags;
 
 };
 
@@ -190,7 +191,7 @@ inline void
 AnyDeviceMap::lock(bool write)
 {
     if (write)
-	write_lock_bh(&_lock);
+	write_lock_irqsave(&_lock, _flags);
     else
 	read_lock(&_lock);
 }
@@ -199,7 +200,7 @@ inline void
 AnyDeviceMap::unlock(bool write)
 {
     if (write)
-	write_unlock_bh(&_lock);
+	write_unlock_irqrestore(&_lock, _flags);
     else
 	read_unlock(&_lock);
 }
---
