x86: Don't unmask disabled irqs when migrating them
authorTian, Kevin <kevin.tian@intel.com>
Fri, 6 May 2011 06:43:56 +0000 (14:43 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 19 May 2011 12:51:08 +0000 (14:51 +0200)
It doesn't make sense to unconditionally unmask a disabled irq when
migrating it from offlined cpu to another. If the irq triggers then it
will be disabled in the interrupt handler anyway. So we can just avoid
unmasking it.

[ tglx: Made masking unconditional again and fixed the changelog ]

Signed-off-by: Fengzhe Zhang <fengzhe.zhang@intel.com>
Signed-off-by: Kevin Tian <kevin.tian@intel.com>
Cc: Ian Campbell <Ian.Campbell@citrix.com>
Cc: Jan Beulich <JBeulich@novell.com>
Cc: "xen-devel@lists.xensource.com" <xen-devel@lists.xensource.com>
Link: http://lkml.kernel.org/r/%3C625BA99ED14B2D499DC4E29D8138F1505C8ED7F7E3%40shsmsx502.ccr.corp.intel.com%3E
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/irq.c

index 544efe2741be49c92fb9bdfe98df2c0671c4dbdf..6c0802eb2f7f7efdc79c9a51d160ac92c70e43c2 100644 (file)
@@ -276,7 +276,8 @@ void fixup_irqs(void)
                else if (!(warned++))
                        set_affinity = 0;
 
-               if (!irqd_can_move_in_process_context(data) && chip->irq_unmask)
+               if (!irqd_can_move_in_process_context(data) &&
+                   !irqd_irq_disabled(data) && chip->irq_unmask)
                        chip->irq_unmask(data);
 
                raw_spin_unlock(&desc->lock);