x86, mrst: Set correct APB timer IRQ affinity for secondary cpu

Offlining the secondary CPU causes the timer irq affinity to be set to
CPU 0. When the secondary CPU is back online again, the wrong irq
affinity will be used.

This patch ensures secondary per CPU timer always has the correct
IRQ affinity when enabled.

Signed-off-by: Jacob Pan <jacob.jun.pan@linux.intel.com>
LKML-Reference: <1294963604-18111-1-git-send-email-jacob.jun.pan@linux.intel.com>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Cc: <stable@kernel.org> 2.6.37

authored by Jacob Pan and committed by H. Peter Anvin 6550904d 62627bec

+8 -6
+8 -6
arch/x86/kernel/apb_timer.c
··· 313 313 if (adev->irq == 0) 314 314 return; 315 315 316 + irq_modify_status(adev->irq, 0, IRQ_MOVE_PCNTXT); 317 + irq_set_affinity(adev->irq, cpumask_of(adev->cpu)); 318 + /* APB timer irqs are set up as mp_irqs, timer is edge type */ 319 + __set_irq_handler(adev->irq, handle_edge_irq, 0, "edge"); 320 + 316 321 if (system_state == SYSTEM_BOOTING) { 317 - irq_modify_status(adev->irq, 0, IRQ_MOVE_PCNTXT); 318 - irq_set_affinity(adev->irq, cpumask_of(adev->cpu)); 319 - /* APB timer irqs are set up as mp_irqs, timer is edge type */ 320 - __set_irq_handler(adev->irq, handle_edge_irq, 0, "edge"); 321 322 if (request_irq(adev->irq, apbt_interrupt_handler, 322 - IRQF_TIMER | IRQF_DISABLED | IRQF_NOBALANCING, 323 - adev->name, adev)) { 323 + IRQF_TIMER | IRQF_DISABLED | 324 + IRQF_NOBALANCING, 325 + adev->name, adev)) { 324 326 printk(KERN_ERR "Failed request IRQ for APBT%d\n", 325 327 adev->num); 326 328 }