summaryrefslogtreecommitdiffstats
path: root/arch/i386/pci/i386.c
diff options
context:
space:
mode:
authorRajesh Shah <rajesh.shah@intel.com>2005-11-23 15:44:59 -0800
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-23 23:04:27 -0800
commited6d14f9760857c745206c978b80352fc09cfd19 (patch)
tree61ac73cfb001362521060d8484d05825e1f20f60 /arch/i386/pci/i386.c
parent5a49f2036ad14092c11d09f186da86fd5ae49a05 (diff)
downloadop-kernel-dev-ed6d14f9760857c745206c978b80352fc09cfd19.zip
op-kernel-dev-ed6d14f9760857c745206c978b80352fc09cfd19.tar.gz
[PATCH] PCI: remove bogus resource collision error
When attempting to hotadd a PCI card with a bridge on it, I saw the kernel reporting resource collision errors even when there were really no collisions. The problem is that the code doesn't skip over "invalid" resources with their resource type flag not set. Others have reported similar problems at boot time and for non-bridge PCI card hotplug too, where the code flags a resource collision for disabled ROMs. This patch fixes both problems. Signed-off-by: Rajesh Shah <rajesh.shah@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/i386/pci/i386.c')
-rw-r--r--arch/i386/pci/i386.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/arch/i386/pci/i386.c b/arch/i386/pci/i386.c
index 6d63385..ed2c8c8 100644
--- a/arch/i386/pci/i386.c
+++ b/arch/i386/pci/i386.c
@@ -221,6 +221,11 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
continue;
r = &dev->resource[idx];
+ if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
+ continue;
+ if ((idx == PCI_ROM_RESOURCE) &&
+ (!(r->flags & IORESOURCE_ROM_ENABLE)))
+ continue;
if (!r->start && r->end) {
printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
return -EINVAL;
@@ -230,8 +235,6 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
if (r->flags & IORESOURCE_MEM)
cmd |= PCI_COMMAND_MEMORY;
}
- if (dev->resource[PCI_ROM_RESOURCE].start)
- cmd |= PCI_COMMAND_MEMORY;
if (cmd != old_cmd) {
printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
pci_write_config_word(dev, PCI_COMMAND, cmd);
OpenPOWER on IntegriCloud