Commit 19ff50ad authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

[PATCH] PCI: add pci_find_next_bus() function to prevent people from walking...

[PATCH] PCI: add pci_find_next_bus() function to prevent people from walking pci bus lists themselves.
parent 67c27d08
...@@ -29,10 +29,10 @@ pci_do_find_bus(struct pci_bus* bus, unsigned char busnr) ...@@ -29,10 +29,10 @@ pci_do_find_bus(struct pci_bus* bus, unsigned char busnr)
struct pci_bus * struct pci_bus *
pci_find_bus(unsigned char busnr) pci_find_bus(unsigned char busnr)
{ {
struct pci_bus* bus; struct pci_bus* bus = NULL;
struct pci_bus* tmp_bus; struct pci_bus* tmp_bus;
pci_for_each_bus(bus) { while ((bus = pci_find_next_bus(bus)) != NULL) {
tmp_bus = pci_do_find_bus(bus, busnr); tmp_bus = pci_do_find_bus(bus, busnr);
if(tmp_bus) if(tmp_bus)
return tmp_bus; return tmp_bus;
...@@ -40,6 +40,26 @@ pci_find_bus(unsigned char busnr) ...@@ -40,6 +40,26 @@ pci_find_bus(unsigned char busnr)
return NULL; return NULL;
} }
/**
* pci_find_next_bus - begin or continue searching for a PCI bus
* @from: Previous PCI bus found, or %NULL for new search.
*
* Iterates through the list of known PCI busses. A new search is
* initiated by passing %NULL to the @from argument. Otherwise if
* @from is not %NULL, searches continue from next device on the
* global list.
*/
struct pci_bus *
pci_find_next_bus(const struct pci_bus *from)
{
struct list_head *n = from ? from->node.next : pci_root_buses.next;
struct pci_bus *b = NULL;
if (n != &pci_root_buses)
b = pci_bus_b(n);
return b;
}
/** /**
* pci_find_slot - locate PCI device from a given PCI slot * pci_find_slot - locate PCI device from a given PCI slot
* @bus: number of PCI bus on which desired PCI device resides * @bus: number of PCI bus on which desired PCI device resides
...@@ -97,7 +117,6 @@ pci_find_subsys(unsigned int vendor, unsigned int device, ...@@ -97,7 +117,6 @@ pci_find_subsys(unsigned int vendor, unsigned int device,
return NULL; return NULL;
} }
/** /**
* pci_find_device - begin or continue searching for a PCI device by vendor/device id * pci_find_device - 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 * @vendor: PCI vendor id to match, or %PCI_ANY_ID to match all vendor ids
......
...@@ -568,6 +568,7 @@ struct pci_dev *pci_find_subsys (unsigned int vendor, unsigned int device, ...@@ -568,6 +568,7 @@ struct pci_dev *pci_find_subsys (unsigned int vendor, unsigned int device,
struct pci_dev *pci_find_class (unsigned int class, const struct pci_dev *from); struct pci_dev *pci_find_class (unsigned int class, const struct pci_dev *from);
struct pci_dev *pci_find_slot (unsigned int bus, unsigned int devfn); 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_capability (struct pci_dev *dev, int cap);
struct pci_bus * pci_find_next_bus(const struct pci_bus *from);
int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val); int pci_bus_read_config_byte (struct pci_bus *bus, unsigned int devfn, int where, u8 *val);
int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val); int pci_bus_read_config_word (struct pci_bus *bus, unsigned int devfn, int where, u16 *val);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment