summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk@flint.arm.linux.org.uk>2003-09-26 01:14:47 +0100
committerRussell King <rmk@flint.arm.linux.org.uk>2003-09-26 01:14:47 +0100
commit733b8cab7fb2a9529bfd65224dfd81472cd58e8f (patch)
treeca11079f718c6b8bafb1e2947d3ef86175f42da3
parent7c587454ee1a25a9443ef908987dc192a0a96516 (diff)
[ARM] Don't use pci_find_device in interrupt context.
-rw-r--r--arch/arm/kernel/bios32.c25
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);
+ }
}
/*