Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6
[sfrench/cifs-2.6.git] / drivers / net / netxen / netxen_nic_main.c
index 6ce6ce1df6d2c16eda31bbd8a48b07c162949e28..fd86e18604e636a5b1ede55a077d56dd2ba06713 100644 (file)
@@ -2001,27 +2001,26 @@ static void netxen_tx_timeout_task(struct work_struct *work)
        if (++adapter->tx_timeo_cnt >= NX_MAX_TX_TIMEOUTS)
                goto request_reset;
 
+       rtnl_lock();
        if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
                /* try to scrub interrupt */
                netxen_napi_disable(adapter);
 
-               adapter->netdev->trans_start = jiffies;
-
                netxen_napi_enable(adapter);
 
                netif_wake_queue(adapter->netdev);
 
                clear_bit(__NX_RESETTING, &adapter->state);
-               return;
        } else {
                clear_bit(__NX_RESETTING, &adapter->state);
-               if (!netxen_nic_reset_context(adapter)) {
-                       adapter->netdev->trans_start = jiffies;
-                       return;
+               if (netxen_nic_reset_context(adapter)) {
+                       rtnl_unlock();
+                       goto request_reset;
                }
-
-               /* context reset failed, fall through for fw reset */
        }
+       adapter->netdev->trans_start = jiffies;
+       rtnl_unlock();
+       return;
 
 request_reset:
        adapter->need_fw_reset = 1;