From: Prarit Bhargava Date: Wed, 27 Oct 2010 13:50:22 +0000 (-0400) Subject: watchdog: iTCO_wdt.c: remove extra pci_dev_put()'s from init code X-Git-Url: http://git.efficios.com/?p=deliverable%2Flinux.git;a=commitdiff_plain;h=ad1d3a26cdb9a0eaa0bf8351a000df0f256b0baa watchdog: iTCO_wdt.c: remove extra pci_dev_put()'s from init code The iTCO_wdt driver erroneously releases the pci_dev, and causes PCI hotremove to fail because of an incorrect usage count. The probe for this driver does a for_each_pci_dev() which gets a reference for a pci_dev when iTCO_wdt_init() is successful. The for_each_pci_dev() loop puts a reference for a pci_dev when iTCO_wdt_init() fails, so the iTCO_wdt_init() does not need to do any pci_dev_put()'s. The only pci_dev_put() that is required is in the iTCO_wdt_cleanup() function. Signed-off-by: Prarit Bhargava Signed-off-by: Wim Van Sebroeck --- diff --git a/drivers/watchdog/iTCO_wdt.c b/drivers/watchdog/iTCO_wdt.c index bc69731a5e6a..f7e90fe47b71 100644 --- a/drivers/watchdog/iTCO_wdt.c +++ b/drivers/watchdog/iTCO_wdt.c @@ -786,7 +786,6 @@ static int __devinit iTCO_wdt_init(struct pci_dev *pdev, /* Something's wrong here, ACPIBASE has to be set */ printk(KERN_ERR PFX "failed to get TCOBASE address, " "device disabled by hardware/BIOS\n"); - pci_dev_put(pdev); return -ENODEV; } iTCO_wdt_private.iTCO_version = @@ -886,7 +885,6 @@ out_unmap: if (iTCO_wdt_private.iTCO_version == 2) iounmap(iTCO_wdt_private.gcs); out: - pci_dev_put(iTCO_wdt_private.pdev); iTCO_wdt_private.ACPIBASE = 0; return ret; }