diff options
| author | Russell King <rmk@flint.arm.linux.org.uk> | 2003-09-26 01:14:47 +0100 |
|---|---|---|
| committer | Russell King <rmk@flint.arm.linux.org.uk> | 2003-09-26 01:14:47 +0100 |
| commit | 733b8cab7fb2a9529bfd65224dfd81472cd58e8f (patch) | |
| tree | ca11079f718c6b8bafb1e2947d3ef86175f42da3 | |
| parent | 7c587454ee1a25a9443ef908987dc192a0a96516 (diff) | |
[ARM] Don't use pci_find_device in interrupt context.
| -rw-r--r-- | arch/arm/kernel/bios32.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c index 82e503746412..a2dbef12cfa5 100644 --- a/arch/arm/kernel/bios32.c +++ b/arch/arm/kernel/bios32.c @@ -20,11 +20,15 @@ static int debug_pci; -void pcibios_report_status(u_int status_mask, int warn) +/* + * We can't use pci_find_device() here since we are + * called from interrupt context. + */ +static void pcibios_bus_report_status(struct pci_bus *bus, u_int status_mask, int warn) { - struct pci_dev *dev = NULL; + struct pci_dev *dev; - while ((dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { + list_for_each_entry(dev, &bus->devices, bus_list) { u16 status; /* @@ -47,6 +51,21 @@ void pcibios_report_status(u_int status_mask, int warn) if (warn) printk("(%s: %04X) ", pci_name(dev), status); } + + list_for_each_entry(dev, &bus->devices, bus_list) + if (dev->subordinate) + pcibios_bus_report_status(dev->subordinate, status_mask, warn); +} + +void pcibios_report_status(u_int status_mask, int warn) +{ + struct list_head *l; + + list_for_each(l, &pci_root_buses) { + struct pci_bus *bus = pci_bus_b(l); + + pcibios_bus_report_status(bus, status_mask, warn); + } } /* |
