sparc64: Skip bogus PCI bridge ranges.
It seems that when a PCI Express bridge is not in use and has no devices behind it, the ranges property is bogus. Specifically the size property is of the form [0xffffffff:...], and if you add this size to the resource start address the 64-bit calculation will overflow. Just check specifically for this size value signature and skip them. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
93a6423bd8
commit
4afba24e5f
1 changed files with 11 additions and 0 deletions
|
@ -489,6 +489,17 @@ static void of_scan_pci_bridge(struct pci_pbm_info *pbm,
|
|||
size = GET_64BIT(ranges, 6);
|
||||
if (flags == 0 || size == 0)
|
||||
continue;
|
||||
|
||||
/* On PCI-Express systems, PCI bridges that have no devices downstream
|
||||
* have a bogus size value where the first 32-bit cell is 0xffffffff.
|
||||
* This results in a bogus range where start + size overflows.
|
||||
*
|
||||
* Just skip these otherwise the kernel will complain when the resource
|
||||
* tries to be claimed.
|
||||
*/
|
||||
if (size >> 32 == 0xffffffff)
|
||||
continue;
|
||||
|
||||
if (flags & IORESOURCE_IO) {
|
||||
res = bus->resource[0];
|
||||
if (res->flags) {
|
||||
|
|
Loading…
Reference in a new issue