On Wed, 27 Jun 2007 14:34:03 -0400 H. Peter Anvin wrote: > Alan Cox wrote: > > On Wed, 27 Jun 2007 10:54:30 -0600 > > Matthew Wilcox <[EMAIL PROTECTED]> wrote: > > > >> On Wed, Jun 27, 2007 at 12:41:41PM -0400, H. Peter Anvin wrote: > >>> Note that EDD has no way of referencing anything but the zero domain > >>> (which is presumably the one which is addressed by I/O ports CF8/CFC on > >>> the BSP.) So in this particular case I would say pci_get_bus_and_slot() > >>> is fine. > >> Except that you're not guaranteed to get the bus that's in domain zero. > > > > Which is trivial to fix > > Yes, and that's probably the only sane definition of that API.
Is this what you mean? --- From: Randy Dunlap <[EMAIL PROTECTED]> Limit pci_get_bus_and_slot() to domain (segment) 0 since domain is not specified in the function call and defaulting to domain 0 is the only reasonable thing to do (rather than returning a device from some other unknown domain). Signed-off-by: Randy Dunlap <[EMAIL PROTECTED]> --- drivers/pci/search.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) --- linux-2622-rc6mm1.orig/drivers/pci/search.c +++ linux-2622-rc6mm1/drivers/pci/search.c @@ -173,12 +173,14 @@ struct pci_dev * pci_get_slot(struct pci } /** - * pci_get_bus_and_slot - locate PCI device from a given PCI slot + * pci_get_bus_and_slot - locate PCI device from a given PCI bus & slot * @bus: number of PCI bus on which desired PCI device resides * @devfn: encodes number of PCI slot in which the desired PCI * device resides and the logical device number within that slot * in case of multi-function devices. * + * Note: the bus/slot search is limited to PCI domain (segment) 0. + * * Given a PCI bus and slot/function number, the desired PCI device * is located in system global list of PCI devices. If the device * is found, a pointer to its data structure is returned. If no @@ -191,7 +193,8 @@ struct pci_dev * pci_get_bus_and_slot(un struct pci_dev *dev = NULL; while ((dev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { - if (dev->bus->number == bus && dev->devfn == devfn) + if (pci_domain_nr(dev->bus) == 0 && + (dev->bus->number == bus && dev->devfn == devfn)) return dev; } return NULL; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/