From mboxrd@z Thu Jan 1 00:00:00 1970 From: Craig Christophel Date: Tue, 05 Mar 2002 01:12:42 +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 Also if there is only infrequent useage of the list to change the list, perhaps you should use a rwlock_t instead. It's just as light as a spinlock but has the advantage of allowing multiple readers. Craig. On Monday 04 March 2002 19:17, Greg KH wrote: > 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 > > _______________________________________________ > Kernel-janitor-discuss mailing list > Kernel-janitor-discuss@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/kernel-janitor-discuss _______________________________________________ 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