From c6e80c04a7f20bdf3bde490ff842bcc1c800bf2a Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Mon, 24 Oct 2016 16:44:55 +0200 Subject: [RHEL7.4 PATCH] igb_resume: Fix up hw_addr on resume A suspend hanging for too long can trigger spurious reads. The device is already suspended so igb_rd32 fails to read and sets hw->hw_addr to NULL. If we don't fix that here, subsequent code will fail to write to HW registers and igb crashes eventually in a writel call. Signed-off-by: Corinna Vinschen --- drivers/net/ethernet/intel/igb/igb_main.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 8e96c35..d1f9d34 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -7577,6 +7577,9 @@ static int igb_resume(struct device *dev) pci_enable_wake(pdev, PCI_D3hot, 0); pci_enable_wake(pdev, PCI_D3cold, 0); + if (E1000_REMOVED(hw->hw_addr) && adapter->io_addr) + hw->hw_addr = adapter->io_addr; + if (igb_init_interrupt_scheme(adapter, true)) { dev_err(&pdev->dev, "Unable to allocate memory for queues\n"); return -ENOMEM; -- 2.5.5