Currently, in almost every PCI driver, if pci_request_regions() fails -- indicating another driver is using the hardware -- then pci_disable_device() is called on the error path, disabling a device that another driver is using To call this "rather rude" is an understatement :) Fortunately, the ugliness is mitigated in large part by the PCI layer helping to make sure that no two drivers bind to the same PCI device. Thus, in the vast majority of cases, pci_request_regions() -should- be guaranteed to succeed. However, there are oddball cases like mixed PCI/ISA devices (hello IDE) or cases where a driver refers a pci_dev other than the primary, where pci_request_regions() and request_regions() still matter. As a result, I have committed the attached patch to libata-2.6. In many cases, it is a "semantic fix", addressing the case * pci_request_regions() indicates hardware is in use * we rudely disable the in-use hardware that would not occur in practice. But better safe than sorry. Code cuts cut-n-pasted all over the place. I'm hoping one or two things will happen now: * janitors fix up the other PCI drivers along these lines * improve the PCI API so that pci_request_regions() is axiomatic