Skip to contentSkip to conversation

call 'pci_dev_put' after pci_get_device

PATCH In review shaohua li 2 participants 2 messages Oct 25, 2004 PCI

lore
Share & tools
lore

shaohua li

author
#0 lore raw

PATCH 1/1 call 'pci_dev_put' after pci_get_device

Hi,
Some code didn't call 'pci_dev_put' after pci_get_device. Below is an incomplete list.

Thanks,
Shaohua

===== drivers/pci/pci.c 1.73 vs edited =====

drivers/pci/pci.c +1 -0
@@ -734,6 +734,7 @@ static int __devinit pci_init(void)
 
 	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
 		pci_fixup_device(pci_fixup_final, dev);
+		pci_dev_put(dev);
 	}
 	return 0;
 }

===== drivers/pci/quirks.c 1.55 vs edited =====

drivers/pci/quirks.c +1 -0
@@ -38,6 +38,7 @@ static void __devinit quirk_passive_rele
 			dlc |= 1<<1;
 			pci_write_config_byte(d, 0x82, dlc);
 		}
+		pci_dev_put(d);
 	}
 }
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82441,	quirk_passive_release

);
===== drivers/pci/setup-irq.c 1.5 vs edited =====

drivers/pci/setup-irq.c +1 -0
@@ -67,5 +67,6 @@ pci_fixup_irqs(u8 (*swizzle)(struct pci_
 	struct pci_dev *dev = NULL;
 	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
 		pdev_fixup_irq(dev, swizzle, map_irq);
+		pci_dev_put(dev);
 	}
 }

===== drivers/pci/pci.c 1.73 vs edited =====

drivers/pci/pci.c +1 -0
@@ -734,6 +734,7 @@ static int __devinit pci_init(void)
 
 	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
 		pci_fixup_device(pci_fixup_final, dev);
+		pci_dev_put(dev);
 	}
 	return 0;
 }

===== drivers/pci/quirks.c 1.55 vs edited =====

drivers/pci/quirks.c +1 -0
@@ -38,6 +38,7 @@ static void __devinit quirk_passive_rele
 			dlc |= 1<<1;
 			pci_write_config_byte(d, 0x82, dlc);
 		}
+		pci_dev_put(d);
 	}
 }
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82441,	quirk_passive_release );

===== drivers/pci/setup-irq.c 1.5 vs edited =====

drivers/pci/setup-irq.c +1 -0
@@ -67,5 +67,6 @@ pci_fixup_irqs(u8 (*swizzle)(struct pci_
 	struct pci_dev *dev = NULL;
 	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
 		pdev_fixup_irq(dev, swizzle, map_irq);
+		pci_dev_put(dev);
 	}
 }
#1 lore raw
Quoted 6 lines · shaohua li

Hi,
Some code didn't call 'pci_dev_put' after pci_get_device. Below is an incomplete list.

Thanks,
Shaohua

If pci_get_device() is passed in a non-NULL dev it internally does a pci_dev_put(). So if you do a complete while loop (ie. no breaks, gotos or returns), pci_dev_put() is unnecessary.

Quoted 36 lines

===== drivers/pci/pci.c 1.73 vs edited =====

drivers/pci/pci.c +1 -0
@@ -734,6 +734,7 @@ static int __devinit pci_init(void)
 
 	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
 		pci_fixup_device(pci_fixup_final, dev);
+		pci_dev_put(dev);
 	}
 	return 0;
 }

===== drivers/pci/quirks.c 1.55 vs edited =====

drivers/pci/quirks.c +1 -0
@@ -38,6 +38,7 @@ static void __devinit quirk_passive_rele
 			dlc |= 1<<1;
 			pci_write_config_byte(d, 0x82, dlc);
 		}
+		pci_dev_put(d);
 	}
 }
 DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL,	PCI_DEVICE_ID_INTEL_82441,	quirk_passive_release

);
===== drivers/pci/setup-irq.c 1.5 vs edited =====

drivers/pci/setup-irq.c +1 -0
@@ -67,5 +67,6 @@ pci_fixup_irqs(u8 (*swizzle)(struct pci_
 	struct pci_dev *dev = NULL;
 	while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) {
 		pdev_fixup_irq(dev, swizzle, map_irq);
+		pci_dev_put(dev);
 	}
 }