]> git.hungrycats.org Git - linux/commitdiff
[ARM] Don't use pci_find_device in interrupt context.
authorRussell King <rmk@flint.arm.linux.org.uk>
Fri, 26 Sep 2003 00:14:47 +0000 (01:14 +0100)
committerRussell King <rmk@flint.arm.linux.org.uk>
Fri, 26 Sep 2003 00:14:47 +0000 (01:14 +0100)
arch/arm/kernel/bios32.c

index 82e5037464125b0e6a53fe30c46daea147086ab1..a2dbef12cfa52c0b92af8038d7f4a896f692746d 100644 (file)
 
 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);
+       }
 }
 
 /*