|
@@ -5,7 +5,7 @@
|
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
|
* for more details.
|
|
|
*
|
|
|
- * Copyright (c) 2000-2007 Silicon Graphics, Inc. All Rights Reserved.
|
|
|
+ * Copyright (c) 2000-2008 Silicon Graphics, Inc. All Rights Reserved.
|
|
|
*/
|
|
|
|
|
|
#include <linux/irq.h>
|
|
@@ -375,6 +375,7 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
|
|
|
int cpu = nasid_slice_to_cpuid(nasid, slice);
|
|
|
#ifdef CONFIG_SMP
|
|
|
int cpuphys;
|
|
|
+ irq_desc_t *desc;
|
|
|
#endif
|
|
|
|
|
|
pci_dev_get(pci_dev);
|
|
@@ -391,6 +392,12 @@ void sn_irq_fixup(struct pci_dev *pci_dev, struct sn_irq_info *sn_irq_info)
|
|
|
#ifdef CONFIG_SMP
|
|
|
cpuphys = cpu_physical_id(cpu);
|
|
|
set_irq_affinity_info(sn_irq_info->irq_irq, cpuphys, 0);
|
|
|
+ desc = irq_to_desc(sn_irq_info->irq_irq);
|
|
|
+ /*
|
|
|
+ * Affinity was set by the PROM, prevent it from
|
|
|
+ * being reset by the request_irq() path.
|
|
|
+ */
|
|
|
+ desc->status |= IRQ_AFFINITY_SET;
|
|
|
#endif
|
|
|
}
|
|
|
|