[WATCHDOG] iTCO_wdt.c - pci_dev_put fix
authorWim Van Sebroeck <wim@iguana.be>
Wed, 19 Jul 2006 20:39:13 +0000 (22:39 +0200)
committerWim Van Sebroeck <wim@iguana.be>
Tue, 3 Oct 2006 19:34:56 +0000 (21:34 +0200)
for_each_pci_dev calls pci_get_device (and thus
it calls pci_dev_get). So we need to do a pci_dev_put
to keep the refcounting correct.
(Thanks to Jiri Slaby <jirislaby@gmail.com>)

Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
drivers/char/watchdog/iTCO_wdt.c

index cbdfbf00cfb7b0f85c8578f7920ff6abd90dc740..852ad8389bc742fe70b6aa0651f43229aa52506d 100644 (file)
@@ -45,7 +45,7 @@
 /* Module and version information */
 #define DRV_NAME        "iTCO_wdt"
 #define DRV_VERSION     "1.00"
-#define DRV_RELDATE     "18-Jun-2006"
+#define DRV_RELDATE     "19-Jul-2006"
 #define PFX            DRV_NAME ": "
 
 /* Includes */
@@ -558,6 +558,7 @@ static int iTCO_wdt_init(struct pci_dev *pdev, const struct pci_device_id *ent,
        if (base_address == 0x00000000) {
                /* Something's wrong here, ACPIBASE has to be set */
                printk(KERN_ERR PFX "failed to get TCOBASE address\n");
+               pci_dev_put(pdev);
                return -ENODEV;
        }
        iTCO_wdt_private.iTCO_version = iTCO_chipset_info[ent->driver_data].iTCO_version;
@@ -649,6 +650,7 @@ out:
        if (iTCO_wdt_private.iTCO_version == 2)
                iounmap(iTCO_wdt_private.gcs);
        iTCO_wdt_private.ACPIBASE = 0;
+       pci_dev_put(iTCO_wdt_private.pdev);
        return ret;
 }
 
@@ -664,6 +666,7 @@ static void iTCO_wdt_cleanup(void)
        release_region(TCOBASE, 0x20);
        if (iTCO_wdt_private.iTCO_version == 2)
                iounmap(iTCO_wdt_private.gcs);
+       pci_dev_put(iTCO_wdt_private.pdev);
 }
 
 static int iTCO_wdt_probe(struct platform_device *dev)