diff options
author | Amit Kumar Salecha <amit.salecha@qlogic.com> | 2010-03-29 02:43:42 +0000 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-03-29 13:18:36 -0700 |
commit | 6b50ea1516fab30ce5843e5b11e43488f38c776d (patch) | |
tree | 70df437e179bd7d588460549f6f5e996a4ecd13c | |
parent | ff90cd4a1dcfc03bf228d94f553619198e65bc42 (diff) | |
download | linux-6b50ea1516fab30ce5843e5b11e43488f38c776d.tar.bz2 |
netxen: fix corner cases of firmware recovery
Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com>
o DEV_NEED_RESET state was not handled during fw intialization phase.
o nx_decr_dev_ref_cnt() can return error, if fail to grab pcie seamphore.
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/netxen/netxen_nic_main.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 08780ef1c1f8..68903bf06cf6 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c @@ -2294,6 +2294,7 @@ netxen_fwinit_work(struct work_struct *work) } break; + case NX_DEV_NEED_RESET: case NX_DEV_INITALIZING: if (++adapter->fw_wait_cnt < FW_POLL_THRESH) { netxen_schedule_work(adapter, @@ -2337,6 +2338,9 @@ netxen_detach_work(struct work_struct *work) ref_cnt = nx_decr_dev_ref_cnt(adapter); + if (ref_cnt == -EIO) + goto err_ret; + delay = (ref_cnt == 0) ? 0 : (2 * FW_POLL_DELAY); adapter->fw_wait_cnt = 0; |