bnx2x: Allow recovery from second slot reset
authorYuval Mintz <yuvalmin@broadcom.com>
Wed, 24 Apr 2013 01:45:02 +0000 (01:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 24 Apr 2013 20:33:54 +0000 (16:33 -0400)
As part of PCIe Advanced Error Reporting flow, if a fatal PCI error occurs,
the AER driver will cause bnx2x's PCI-core to reset. The driver's PCI error
handlers will in turn restore the PCI configuration space values by calling
`pci_restore_state'.

However, as bnx2x does not save the PCI configuration after restoration,
An additional fatal PCI error will leave the function in an unstable state
until reboot, as the registers in the PCI configuration space will contain
reset values.

Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com>
Signed-off-by: Ariel Elior <ariele@broadcom.com>
Signed-off-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c

index dedf68377e74939ca8c7d49ee760d6fc19a6a2f5..fbfff1b3365e22d73fa702f399d95283e844fbcb 100644 (file)
@@ -12807,6 +12807,7 @@ static pci_ers_result_t bnx2x_io_slot_reset(struct pci_dev *pdev)
 
        pci_set_master(pdev);
        pci_restore_state(pdev);
+       pci_save_state(pdev);
 
        if (netif_running(dev))
                bnx2x_set_power_state(bp, PCI_D0);