Skip to content

Commit

Permalink
[SPARC64]: Fix pci_intmap_match().
Browse files Browse the repository at this point in the history
When crawling up the PCI bus chain, stop at the first node
that has an interrupt-map property before we hit the root.

Also, if we use a bus interrupt-{map,mask} do not forget to
update the 'intmask' pointer as we do for the 'intmap' pointer.

Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
David S. Miller committed Mar 20, 2006
1 parent ab66a50 commit 63c2a0e
Showing 1 changed file with 10 additions and 3 deletions.
13 changes: 10 additions & 3 deletions arch/sparc64/kernel/pci_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -581,18 +581,23 @@ static int __init pci_intmap_match(struct pci_dev *pdev, unsigned int *interrupt
int plen;

bus_dev = pdev->bus->self;
bus_pcp = bus_dev->sysdata;
regs_dev = pdev;
regs_pcp = regs_dev->sysdata;

while (bus_dev->bus &&
bus_dev->bus->number != pbm->pci_first_busno) {
bus_dev->bus->number != pbm->pci_first_busno &&
prom_getproplen(bus_pcp->prom_node,
"interrupt-map") <= 0) {
regs_dev = bus_dev;
regs_pcp = regs_dev->sysdata;

bus_dev = bus_dev->bus->self;
bus_pcp = bus_dev->sysdata;
}

regs_pcp = regs_dev->sysdata;
pregs = regs_pcp->prom_regs;

bus_pcp = bus_dev->sysdata;

/* But if the PCI bridge has it's own interrupt map
* and mask properties, use that and the regs of the
Expand All @@ -616,6 +621,8 @@ static int __init pci_intmap_match(struct pci_dev *pdev, unsigned int *interrupt
return 0;
}

intmask = &bridge_local_intmask;

if (pdev->bus->self != bus_dev)
map_slot = 1;
} else {
Expand Down

0 comments on commit 63c2a0e

Please sign in to comment.