[PATCH] yenta oops fix
authorIvan Kokshaysky <ink@jurassic.park.msu.ru>
Wed, 14 Sep 2005 19:05:30 +0000 (23:05 +0400)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 14 Sep 2005 19:28:15 +0000 (12:28 -0700)
In some cases, especially on modern laptops with a lot of PCI and
cardbus bridges, we're unable to assign correct secondary/subordinate
bus numbers to all cardbus bridges due to BIOS limitations unless
we are using "pci=assign-busses" boot option.
So some cardbus controllers may not have attached subordinate pci_bus
structure, and yenta driver must cope with it - just ignore such cardbus
bridges.

For example, see https://bugzilla.novell.com/show_bug.cgi?id=113778

Signed-off-by: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/pcmcia/yenta_socket.c

index f0997c36c9b714b9aaf3a675c6cfb27b96616cdd..2e43911b487631cb0653d8e4819695328a68b424 100644 (file)
@@ -1045,7 +1045,18 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
 {
        struct yenta_socket *socket;
        int ret;
-       
+
+       /*
+        * If we failed to assign proper bus numbers for this cardbus
+        * controller during PCI probe, its subordinate pci_bus is NULL.
+        * Bail out if so.
+        */
+       if (!dev->subordinate) {
+               printk(KERN_ERROR "Yenta: no bus associated with %s!\n",
+                       pci_name(dev));
+               return -ENODEV;
+       }
+
        socket = kmalloc(sizeof(struct yenta_socket), GFP_KERNEL);
        if (!socket)
                return -ENOMEM;