diff options
Diffstat (limited to 'drivers/parisc/iosapic.c')
| -rw-r--r-- | drivers/parisc/iosapic.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/drivers/parisc/iosapic.c b/drivers/parisc/iosapic.c index 0797659ee016..501aaf1f253f 100644 --- a/drivers/parisc/iosapic.c +++ b/drivers/parisc/iosapic.c | |||
| @@ -487,7 +487,7 @@ iosapic_xlate_pin(struct iosapic_info *isi, struct pci_dev *pcidev) | |||
| 487 | } | 487 | } |
| 488 | 488 | ||
| 489 | /* Check if pcidev behind a PPB */ | 489 | /* Check if pcidev behind a PPB */ |
| 490 | if (NULL != pcidev->bus->self) { | 490 | if (pcidev->bus->parent) { |
| 491 | /* Convert pcidev INTR_PIN into something we | 491 | /* Convert pcidev INTR_PIN into something we |
| 492 | ** can lookup in the IRT. | 492 | ** can lookup in the IRT. |
| 493 | */ | 493 | */ |
| @@ -523,10 +523,9 @@ iosapic_xlate_pin(struct iosapic_info *isi, struct pci_dev *pcidev) | |||
| 523 | #endif /* PCI_BRIDGE_FUNCS */ | 523 | #endif /* PCI_BRIDGE_FUNCS */ |
| 524 | 524 | ||
| 525 | /* | 525 | /* |
| 526 | ** Locate the host slot the PPB nearest the Host bus | 526 | * Locate the host slot of the PPB. |
| 527 | ** adapter. | 527 | */ |
| 528 | */ | 528 | while (p->parent->parent) |
| 529 | while (NULL != p->parent->self) | ||
| 530 | p = p->parent; | 529 | p = p->parent; |
| 531 | 530 | ||
| 532 | intr_slot = PCI_SLOT(p->self->devfn); | 531 | intr_slot = PCI_SLOT(p->self->devfn); |
| @@ -709,11 +708,14 @@ static void iosapic_set_affinity_irq(unsigned int irq, | |||
| 709 | struct vector_info *vi = iosapic_get_vector(irq); | 708 | struct vector_info *vi = iosapic_get_vector(irq); |
| 710 | u32 d0, d1, dummy_d0; | 709 | u32 d0, d1, dummy_d0; |
| 711 | unsigned long flags; | 710 | unsigned long flags; |
| 711 | int dest_cpu; | ||
| 712 | 712 | ||
| 713 | if (cpu_check_affinity(irq, dest)) | 713 | dest_cpu = cpu_check_affinity(irq, dest); |
| 714 | if (dest_cpu < 0) | ||
| 714 | return; | 715 | return; |
| 715 | 716 | ||
| 716 | vi->txn_addr = txn_affinity_addr(irq, cpumask_first(dest)); | 717 | irq_desc[irq].affinity = cpumask_of_cpu(dest_cpu); |
| 718 | vi->txn_addr = txn_affinity_addr(irq, dest_cpu); | ||
| 717 | 719 | ||
| 718 | spin_lock_irqsave(&iosapic_lock, flags); | 720 | spin_lock_irqsave(&iosapic_lock, flags); |
| 719 | /* d1 contains the destination CPU, so only want to set that | 721 | /* d1 contains the destination CPU, so only want to set that |
