Re: [PATCH] PCI fixes for 2.5.62

From: Greg KH (greg@kroah.com)
Date: Thu Feb 20 2003 - 19:45:00 EST


ChangeSet 1.1005, 2003/02/20 14:23:58-08:00, greg@kroah.com

[PATCH] PCI i386: remove large stack usage in pcibios_fixup_peer_bridges()

diff -Nru a/arch/i386/pci/legacy.c b/arch/i386/pci/legacy.c
--- a/arch/i386/pci/legacy.c Thu Feb 20 16:46:27 2003
+++ b/arch/i386/pci/legacy.c Thu Feb 20 16:46:27 2003
@@ -12,28 +12,39 @@
 static void __devinit pcibios_fixup_peer_bridges(void)
 {
         int n;
- struct pci_bus bus;
- struct pci_dev dev;
+ struct pci_bus *bus;
+ struct pci_dev *dev;
         u16 l;
 
         if (pcibios_last_bus <= 0 || pcibios_last_bus >= 0xff)
                 return;
         DBG("PCI: Peer bridge fixup\n");
+
+ bus = kmalloc(sizeof(*bus), GFP_ATOMIC);
+ dev = kmalloc(sizeof(*dev), GFP_ATOMIC);
+ if (!bus || !dev) {
+ printk(KERN_ERR "Out of memory in %s\n", __FUNCTION__);
+ goto exit;
+ }
+
         for (n=0; n <= pcibios_last_bus; n++) {
                 if (pci_bus_exists(&pci_root_buses, n))
                         continue;
- bus.number = n;
- bus.ops = pci_root_ops;
- dev.bus = &bus;
- for(dev.devfn=0; dev.devfn<256; dev.devfn += 8)
- if (!pci_read_config_word(&dev, PCI_VENDOR_ID, &l) &&
+ bus->number = n;
+ bus->ops = pci_root_ops;
+ dev->bus = bus;
+ for (dev->devfn=0; dev->devfn<256; dev->devfn += 8)
+ if (!pci_read_config_word(dev, PCI_VENDOR_ID, &l) &&
                             l != 0x0000 && l != 0xffff) {
- DBG("Found device at %02x:%02x [%04x]\n", n, dev.devfn, l);
+ DBG("Found device at %02x:%02x [%04x]\n", n, dev->devfn, l);
                                 printk(KERN_INFO "PCI: Discovered peer bus %02x\n", n);
                                 pci_scan_bus(n, pci_root_ops, NULL);
                                 break;
                         }
         }
+exit:
+ kfree(dev);
+ kfree(bus);
 }
 
 static int __init pci_legacy_init(void)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Feb 23 2003 - 22:00:32 EST