If igb_init_interrupt_scheme() or __igb_open() fails after
pci_enable_device_mem() succeeded, __igb_resume() returns the error
without calling pci_disable_device(). The PCI enable count stays
elevated and the device remains enabled even though the driver failed
to resume it.
Disable the device on both failure paths.
Fixes: 9d5c824399de ("igb: PCI-Express 82575 Gigabit Ethernet driver")
Cc: [email protected]
Assisted-by: DeepSeek-V4.1-Flash and OpenAI Codex
Signed-off-by: Wentao Liang <[email protected]>
---
drivers/net/ethernet/intel/igb/igb_main.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c
b/drivers/net/ethernet/intel/igb/igb_main.c
index d4a897a8c82c..853bc99a1011 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -9621,6 +9621,7 @@ static int __igb_resume(struct device *dev, bool rpm)
if (igb_init_interrupt_scheme(adapter, true)) {
dev_err(&pdev->dev, "Unable to allocate memory for queues\n");
+ pci_disable_device(pdev);
return -ENOMEM;
}
@@ -9647,6 +9648,9 @@ static int __igb_resume(struct device *dev, bool rpm)
if (!rpm)
rtnl_unlock();
+ if (err)
+ pci_disable_device(pdev);
+
return err;
}
--
2.34.1