From: Adrian Bunk After "ide: complete switch to pci_get" we can remove the no longer used pci_find_device_reverse(). akpm: normally we'd withdraw this after a warning period, with EXPORT_UNUSED_SYMBOL(). But Alan says Normally - but for the fact pci_find_device{_reverse} is unsafe on any box with any kind of pci hotplug events. It really needs to die. It is not hotplug safe. The alternative would be to export it only with !CONFIG_HOTPLUG (which is what my test kernel does for both this and pci_find_device()). If we do that then to all intents and purposes it vanishes from most standard builds The conversion is also trivial Signed-off-by: Adrian Bunk Acked-by: Alan Cox Cc: Greg KH Signed-off-by: Andrew Morton --- drivers/pci/search.c | 38 -------------------------------------- include/linux/pci.h | 1 - 2 files changed, 39 deletions(-) diff -puN drivers/pci/search.c~remove-drivers-pci-searchcpci_find_device_reverse drivers/pci/search.c --- a/drivers/pci/search.c~remove-drivers-pci-searchcpci_find_device_reverse +++ a/drivers/pci/search.c @@ -340,43 +340,6 @@ exit: } /** - * pci_find_device_reverse - begin or continue searching for a PCI device by vendor/device id - * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids - * @device: PCI device id to match, or %PCI_ANY_ID to match all device ids - * @from: Previous PCI device found in search, or %NULL for new search. - * - * Iterates through the list of known PCI devices in the reverse order of - * pci_find_device(). - * If a PCI device is found with a matching @vendor and @device, a pointer to - * its device structure is returned. Otherwise, %NULL is returned. - * A new search is initiated by passing %NULL as the @from argument. - * Otherwise if @from is not %NULL, searches continue from previous device - * on the global list. - */ -struct pci_dev * -pci_find_device_reverse(unsigned int vendor, unsigned int device, const struct pci_dev *from) -{ - struct list_head *n; - struct pci_dev *dev; - - WARN_ON(in_interrupt()); - down_read(&pci_bus_sem); - n = from ? from->global_list.prev : pci_devices.prev; - - while (n && (n != &pci_devices)) { - dev = pci_dev_g(n); - if ((vendor == PCI_ANY_ID || dev->vendor == vendor) && - (device == PCI_ANY_ID || dev->device == device)) - goto exit; - n = n->prev; - } - dev = NULL; -exit: - up_read(&pci_bus_sem); - return dev; -} - -/** * pci_get_class - begin or continue searching for a PCI device by class * @class: search for a PCI device with this class designation * @from: Previous PCI device found in search, or %NULL for new search. @@ -451,7 +414,6 @@ EXPORT_SYMBOL(pci_dev_present); EXPORT_SYMBOL(pci_find_present); EXPORT_SYMBOL(pci_find_device); -EXPORT_SYMBOL(pci_find_device_reverse); EXPORT_SYMBOL(pci_find_slot); /* For boot time work */ EXPORT_SYMBOL(pci_find_bus); diff -puN include/linux/pci.h~remove-drivers-pci-searchcpci_find_device_reverse include/linux/pci.h --- a/include/linux/pci.h~remove-drivers-pci-searchcpci_find_device_reverse +++ a/include/linux/pci.h @@ -477,7 +477,6 @@ extern void pci_sort_breadthfirst(void); /* Generic PCI functions exported to card drivers */ struct pci_dev *pci_find_device (unsigned int vendor, unsigned int device, const struct pci_dev *from); -struct pci_dev *pci_find_device_reverse (unsigned int vendor, unsigned int device, const struct pci_dev *from); struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); int pci_find_capability (struct pci_dev *dev, int cap); int pci_find_next_capability (struct pci_dev *dev, u8 pos, int cap); _