summaryrefslogtreecommitdiff
path: root/drivers/parisc/iosapic.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-03-14 11:58:38 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2009-03-14 11:58:38 -0700
commitbf9bc995a59d8c152a4d7e6465d6afa1e098b3e8 (patch)
treeb525863daa5aa6e03afd734a3d38e3680569ff5c /drivers/parisc/iosapic.c
parent6d71135d635f84b584df55096627ed750c069e61 (diff)
parente8f208e8f727515bc605f241a5f854b41f77d0ed (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6.29
* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6.29: parisc: update defconfigs parisc: define x->x mmio accessors parisc: dino: struct device - replace bus_id with dev_name(), dev_set_name() parisc: convert cpu_check_affinity to new cpumask api parisc: convert (read|write)bwlq to inlines parisc: fix use of new cpumask api in irq.c parisc: update parisc for new irq_desc parisc: update MAINTAINERS parisc: fix wrong assumption about bus->self parisc: fix 64bit build parisc: add braces around arguments in assembler macros parisc: fix dev_printk() compile warnings for accessing a device struct parisc: remove unused local out_putf label parisc: fix `struct pt_regs' declared inside parameter list warning parisc: fix section mismatch warnings parisc: remove klist iterators parisc: BUG_ON() cleanup
Diffstat (limited to 'drivers/parisc/iosapic.c')
-rw-r--r--drivers/parisc/iosapic.c16
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)
}
/* Check if pcidev behind a PPB */
- if (NULL != pcidev->bus->self) {
+ if (pcidev->bus->parent) {
/* Convert pcidev INTR_PIN into something we
** can lookup in the IRT.
*/
@@ -523,10 +523,9 @@ iosapic_xlate_pin(struct iosapic_info *isi, struct pci_dev *pcidev)
#endif /* PCI_BRIDGE_FUNCS */
/*
- ** Locate the host slot the PPB nearest the Host bus
- ** adapter.
- */
- while (NULL != p->parent->self)
+ * Locate the host slot of the PPB.
+ */
+ while (p->parent->parent)
p = p->parent;
intr_slot = PCI_SLOT(p->self->devfn);
@@ -709,11 +708,14 @@ static void iosapic_set_affinity_irq(unsigned int irq,
struct vector_info *vi = iosapic_get_vector(irq);
u32 d0, d1, dummy_d0;
unsigned long flags;
+ int dest_cpu;
- if (cpu_check_affinity(irq, dest))
+ dest_cpu = cpu_check_affinity(irq, dest);
+ if (dest_cpu < 0)
return;
- vi->txn_addr = txn_affinity_addr(irq, cpumask_first(dest));
+ irq_desc[irq].affinity = cpumask_of_cpu(dest_cpu);
+ vi->txn_addr = txn_affinity_addr(irq, dest_cpu);
spin_lock_irqsave(&iosapic_lock, flags);
/* d1 contains the destination CPU, so only want to set that