From: Chad Dupuis <cdupuis@redhat.com> Date: Tue, 3 Aug 2010 13:48:57 -0400 Subject: [net] netxen: fix tx timeout recovery Message-id: <20100803134613.2239.55742.sendpatchset@localhost.localdomain> Patchwork-id: 27310 O-Subject: [RHEL 5.6 PATCH 8/44] netxen: fix tx timeout recovery Bugzilla: 562937 RH-Acked-by: David S. Miller <davem@redhat.com> RH-Acked-by: Neil Horman <nhorman@redhat.com> Bugzilla ======== 562937 Upstream Status =============== net-2.6 commit id 6a808c6c02fb9f0ffa24ac7cca6cfc323cf98b21 Description =========== >From 55ea868a97cee855f2ed7886066e7a24c926f443 Mon Sep 17 00:00:00 2001 From: Amit Kumar Salecha <amit.salecha@qlogic.com> Date: Tue, 8 Dec 2009 20:40:55 +0000 Subject: [PATCH] netxen: fix tx timeout recovery 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> diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c index 39d434b..c686253 100644 --- a/drivers/net/netxen/netxen_nic_init.c +++ b/drivers/net/netxen/netxen_nic_init.c @@ -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; diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 49ac345..0810f8d 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c @@ -2317,8 +2317,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;