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

Reply via email to