* Re: PCI: remove bogus resource collision error
2005-11-17 1:06 PCI: remove bogus resource collision error Rajesh Shah
@ 2005-11-17 1:05 ` Greg KH
2005-11-17 17:51 ` Rajesh Shah
0 siblings, 1 reply; 3+ messages in thread
From: Greg KH @ 2005-11-17 1:05 UTC (permalink / raw)
To: Rajesh Shah; +Cc: akpm, linux-pci, linux-kernel
On Wed, Nov 16, 2005 at 05:06:22PM -0800, Rajesh Shah wrote:
> 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. Please consider applying.
>
> Signed-off-by: Rajesh Shah <rajesh.shah@intel.com>
>
> arch/i386/pci/i386.c | 8 ++++++--
> 1 files changed, 6 insertions(+), 2 deletions(-)
>
> Index: linux-2.6.15-rc1/arch/i386/pci/i386.c
> ===================================================================
> --- linux-2.6.15-rc1.orig/arch/i386/pci/i386.c
> +++ linux-2.6.15-rc1/arch/i386/pci/i386.c
> @@ -212,6 +212,7 @@ int pcibios_enable_resources(struct pci_
> u16 cmd, old_cmd;
> int idx;
> struct resource *r;
> + unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
>
> pci_read_config_word(dev, PCI_COMMAND, &cmd);
> old_cmd = cmd;
> @@ -221,6 +222,11 @@ int pcibios_enable_resources(struct pci_
> continue;
>
> r = &dev->resource[idx];
> + if (!(r->flags & type_mask))
> + continue;
Is the type_mask variable really needed here? Can't we just test:
if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
instead?
Other than that, looks good, thanks.
greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread
* PCI: remove bogus resource collision error
@ 2005-11-17 1:06 Rajesh Shah
2005-11-17 1:05 ` Greg KH
0 siblings, 1 reply; 3+ messages in thread
From: Rajesh Shah @ 2005-11-17 1:06 UTC (permalink / raw)
To: gregkh, akpm; +Cc: linux-pci, linux-kernel
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. Please consider applying.
Signed-off-by: Rajesh Shah <rajesh.shah@intel.com>
arch/i386/pci/i386.c | 8 ++++++--
1 files changed, 6 insertions(+), 2 deletions(-)
Index: linux-2.6.15-rc1/arch/i386/pci/i386.c
===================================================================
--- linux-2.6.15-rc1.orig/arch/i386/pci/i386.c
+++ linux-2.6.15-rc1/arch/i386/pci/i386.c
@@ -212,6 +212,7 @@ int pcibios_enable_resources(struct pci_
u16 cmd, old_cmd;
int idx;
struct resource *r;
+ unsigned long type_mask = IORESOURCE_IO | IORESOURCE_MEM;
pci_read_config_word(dev, PCI_COMMAND, &cmd);
old_cmd = cmd;
@@ -221,6 +222,11 @@ int pcibios_enable_resources(struct pci_
continue;
r = &dev->resource[idx];
+ if (!(r->flags & type_mask))
+ 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 +236,6 @@ int pcibios_enable_resources(struct pci_
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);
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: PCI: remove bogus resource collision error
2005-11-17 1:05 ` Greg KH
@ 2005-11-17 17:51 ` Rajesh Shah
0 siblings, 0 replies; 3+ messages in thread
From: Rajesh Shah @ 2005-11-17 17:51 UTC (permalink / raw)
To: Greg KH; +Cc: Rajesh Shah, akpm, linux-pci, linux-kernel
On Wed, Nov 16, 2005 at 05:05:35PM -0800, Greg KH wrote:
>
> Is the type_mask variable really needed here? Can't we just test:
> if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
> instead?
>
That'll work too. Here's the updated patch.
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>
arch/i386/pci/i386.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
Index: linux-2.6.15-rc1/arch/i386/pci/i386.c
===================================================================
--- linux-2.6.15-rc1.orig/arch/i386/pci/i386.c
+++ linux-2.6.15-rc1/arch/i386/pci/i386.c
@@ -221,6 +221,11 @@ int pcibios_enable_resources(struct pci_
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_
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);
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-11-17 17:51 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-11-17 1:06 PCI: remove bogus resource collision error Rajesh Shah
2005-11-17 1:05 ` Greg KH
2005-11-17 17:51 ` Rajesh Shah
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox