aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/pci/i386.c
diff options
context:
space:
mode:
authorRajesh Shah <rajesh.shah@intel.com>2005-11-23 18:44:59 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2005-11-24 02:04:27 -0500
commited6d14f9760857c745206c978b80352fc09cfd19 (patch)
tree61ac73cfb001362521060d8484d05825e1f20f60 /arch/i386/pci/i386.c
parent5a49f2036ad14092c11d09f186da86fd5ae49a05 (diff)
[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 6d6338500c3c..ed2c8c899bd3 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)
221 continue; 221 continue;
222 222
223 r = &dev->resource[idx]; 223 r = &dev->resource[idx];
224 if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
225 continue;
226 if ((idx == PCI_ROM_RESOURCE) &&
227 (!(r->flags & IORESOURCE_ROM_ENABLE)))
228 continue;
224 if (!r->start && r->end) { 229 if (!r->start && r->end) {
225 printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev)); 230 printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
226 return -EINVAL; 231 return -EINVAL;
@@ -230,8 +235,6 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
230 if (r->flags & IORESOURCE_MEM) 235 if (r->flags & IORESOURCE_MEM)
231 cmd |= PCI_COMMAND_MEMORY; 236 cmd |= PCI_COMMAND_MEMORY;
232 } 237 }
233 if (dev->resource[PCI_ROM_RESOURCE].start)
234 cmd |= PCI_COMMAND_MEMORY;
235 if (cmd != old_cmd) { 238 if (cmd != old_cmd) {
236 printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd); 239 printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
237 pci_write_config_word(dev, PCI_COMMAND, cmd); 240 pci_write_config_word(dev, PCI_COMMAND, cmd);