• Ivan Kokshaysky's avatar
    [PATCH] yet another fix for setup-bus.c/x86 merge · 960b8466
    Ivan Kokshaysky authored
    There is a slight disagreement between setup-bus.c code and traditional
    x86 PCI setup wrt which recourses are invalid vs resources that are free
    for further allocations.
    
    In particular, in the setup-bus.c, if we failed to allocate some resource,
    we nullify "start" and "flags" fields, but *not* the "end" one.
    
    But x86 pcibios_enable_resources() does the following check:
    
    	if (!r->start && r->end) {
    		printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
    		return -EINVAL;
    
    which means that the device owning the offending resource cannot be
    enabled.
    
    In particular, this breaks cardbus behind the normal decode p2p bridge -
    the cardbus code from setup-bus.c requests rather large IO and MEM
    windows, and if it fails, the socket is completely unavailable.  Which
    is wrong, as the yenta code is capable to allocate smaller windows.
    Signed-off-by: default avatarIvan Kokshaysky <ink@jurassic.park.msu.ru>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    960b8466
setup-bus.c 15.3 KB