From mboxrd@z Thu Jan 1 00:00:00 1970 From: Greg KH Date: Tue, 05 Mar 2002 00:17:28 +0000 Subject: Re: [PATCH] PCI device list locking Message-Id: List-Id: References: In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: linux-hotplug@vger.kernel.org On Mon, Mar 04, 2002 at 03:54:11PM -0800, john stultz wrote: > @@ -605,10 +620,12 @@ > int count = 0; > > list_add_tail(&drv->node, &pci_drivers); > + spin_lock(&pcidevlist_lock); > pci_for_each_dev(dev) { > if (!pci_dev_driver(dev)) > count += pci_announce_device(drv, dev); > } > + spin_unlock(&pcidevlist_lock); > return count; > } > pci_announce_device() calls the pci driver's probe() function, which can easily sleep. Not a good thing :( > @@ -1935,9 +1959,11 @@ > > pcibios_init(); > > + spin_lock(&pcidevlist_lock); > pci_for_each_dev(dev) { > pci_fixup_device(PCI_FIXUP_FINAL, dev); > } > + spin_unlock(&pcidevlist_lock); > > #ifdef CONFIG_PM > pm_register(PM_PCI_DEV, 0, pci_pm_callback); pci_fixup_device() might also be able to sleep, but I didn't go through all of the different fixup calls to make sure. Did you look at these? > diff -u linux24/drivers/pci/setup-bus.c:1.1.1.1 linux24/drivers/pci/setup-bus.c:1.1.1.1.28.3 > --- linux24/drivers/pci/setup-bus.c:1.1.1.1 Tue Dec 18 15:49:16 2001 > +++ linux24/drivers/pci/setup-bus.c Mon Mar 4 15:33:30 2002 > @@ -222,9 +222,11 @@ > ranges.found_vga = 0; > pbus_assign_resources(b, &ranges); > } > + spin_lock(&pcidevlist_lock); > pci_for_each_dev(dev) { > pdev_enable_device(dev); > } > + spin_unlock(&pcidevlist_lock); > } > > /* Check whether the bridge supports I/O forwarding. Can all implementations of pci_write_config_* be safely called with a spinlock held? In short, I don't think you can use a spinlock, but rather a semaphore is probably necessary. thanks, greg k-h _______________________________________________ Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net Linux-hotplug-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel