diff --git a/[refs] b/[refs] index 325b6b3a4649..b9e94f85e2c3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3cd7613e25ffc0a76080045e179f984a32208829 +refs/heads/master: 6f67f9d26fe5ced50f716e9620b42c0721d8b8d9 diff --git a/trunk/arch/powerpc/kernel/prom_parse.c b/trunk/arch/powerpc/kernel/prom_parse.c index 0dfbe1cd28eb..12c51e4ad2b4 100644 --- a/trunk/arch/powerpc/kernel/prom_parse.c +++ b/trunk/arch/powerpc/kernel/prom_parse.c @@ -920,9 +920,20 @@ static int of_irq_map_oldworld(struct device_node *device, int index, /* * Old machines just have a list of interrupt numbers - * and no interrupt-controller nodes. + * and no interrupt-controller nodes. We also have dodgy + * cases where the APPL,interrupts property is completely + * missing behind pci-pci bridges and we have to get it + * from the parent (the bridge itself, as apple just wired + * everything together on these) */ - ints = get_property(device, "AAPL,interrupts", &intlen); + while (device) { + ints = get_property(device, "AAPL,interrupts", &intlen); + if (ints != NULL) + break; + device = device->parent; + if (device && strcmp(device->type, "pci") != 0) + break; + } if (ints == NULL) return -EINVAL; intlen /= sizeof(u32);