netxen: fix tx timeout recovery
authorAmit Kumar Salecha <amit.salecha@qlogic.com>
Tue, 8 Dec 2009 20:40:55 +0000 (20:40 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 23 Dec 2009 22:13:26 +0000 (14:13 -0800)
o In case of tx timeout, firmare may be healthy, but some pci-func may
  see no response from it. Force firmware reset, if some pci-func
  explicitly requests so.

Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/netxen/netxen_nic_init.c
drivers/net/netxen/netxen_nic_main.c

index 02f8d4b..ba62411 100644 (file)
@@ -778,6 +778,9 @@ netxen_need_fw_reset(struct netxen_adapter *adapter)
        if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
                return 1;
 
+       if (adapter->need_fw_reset)
+               return 1;
+
        /* last attempt had failed */
        if (NXRD32(adapter, CRB_CMDPEG_STATE) == PHAN_INITIALIZE_FAILED)
                return 1;
index 41cb0af..1aca626 100644 (file)
@@ -2284,8 +2284,10 @@ netxen_check_health(struct netxen_adapter *adapter)
        }
 
        state = NXRD32(adapter, NX_CRB_DEV_STATE);
-       if (state == NX_DEV_NEED_RESET)
+       if (state == NX_DEV_NEED_RESET) {
+               adapter->need_fw_reset = 1;
                goto detach;
+       }
 
        if (NX_IS_REVISION_P2(adapter->ahw.revision_id))
                return 0;