aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/cxgb3/cxgb3_main.c
diff options
context:
space:
mode:
authorDivy Le Ray <divy@chelsio.com>2008-05-06 22:26:01 -0400
committerJeff Garzik <jgarzik@redhat.com>2008-05-13 01:31:37 -0400
commit204e2f98c2d13f869b8541f3c57c7314f75cab11 (patch)
treea415a3e80acfe19298d0238747aed6b665971558 /drivers/net/cxgb3/cxgb3_main.c
parent48c4b6dbb7e246957e13302668acf7c77e4f8b3a (diff)
cxgb3 - fix EEH
Reset the chip when the PCI link goes down. Preserve the napi structure when a sge qset's resources are freed. Replay only HW initialization when the chip comes out of reset. Signed-off-by: Divy Le ray <divy@chelsio.com> Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
Diffstat (limited to 'drivers/net/cxgb3/cxgb3_main.c')
-rw-r--r--drivers/net/cxgb3/cxgb3_main.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/net/cxgb3/cxgb3_main.c b/drivers/net/cxgb3/cxgb3_main.c
index d67fc10a6b36..3a3127216791 100644
--- a/drivers/net/cxgb3/cxgb3_main.c
+++ b/drivers/net/cxgb3/cxgb3_main.c
@@ -2430,9 +2430,6 @@ static pci_ers_result_t t3_io_error_detected(struct pci_dev *pdev,
2430 test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map)) 2430 test_bit(OFFLOAD_DEVMAP_BIT, &adapter->open_device_map))
2431 offload_close(&adapter->tdev); 2431 offload_close(&adapter->tdev);
2432 2432
2433 /* Free sge resources */
2434 t3_free_sge_resources(adapter);
2435
2436 adapter->flags &= ~FULL_INIT_DONE; 2433 adapter->flags &= ~FULL_INIT_DONE;
2437 2434
2438 pci_disable_device(pdev); 2435 pci_disable_device(pdev);
@@ -2457,8 +2454,12 @@ static pci_ers_result_t t3_io_slot_reset(struct pci_dev *pdev)
2457 goto err; 2454 goto err;
2458 } 2455 }
2459 pci_set_master(pdev); 2456 pci_set_master(pdev);
2457 pci_restore_state(pdev);
2458
2459 /* Free sge resources */
2460 t3_free_sge_resources(adapter);
2460 2461
2461 if (t3_prep_adapter(adapter, adapter->params.info, 1)) 2462 if (t3_replay_prep_adapter(adapter))
2462 goto err; 2463 goto err;
2463 2464
2464 return PCI_ERS_RESULT_RECOVERED; 2465 return PCI_ERS_RESULT_RECOVERED;
@@ -2610,6 +2611,7 @@ static int __devinit init_one(struct pci_dev *pdev,
2610 } 2611 }
2611 2612
2612 pci_set_master(pdev); 2613 pci_set_master(pdev);
2614 pci_save_state(pdev);
2613 2615
2614 mmio_start = pci_resource_start(pdev, 0); 2616 mmio_start = pci_resource_start(pdev, 0);
2615 mmio_len = pci_resource_len(pdev, 0); 2617 mmio_len = pci_resource_len(pdev, 0);