sh: Disable IRQ balancing for timer and IPI IRQs.
authorPaul Mundt <lethal@linux-sh.org>
Thu, 15 Apr 2010 02:59:28 +0000 (11:59 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Thu, 15 Apr 2010 02:59:28 +0000 (11:59 +0900)
Make sure that the timer IRQs and IPIs aren't enabled for IRQ balancing.
IPIs are disabled as a result of being percpu while the timers simply
disable balancing outright.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/cpu/sh4a/smp-shx3.c
drivers/clocksource/sh_cmt.c
drivers/clocksource/sh_mtu2.c
drivers/clocksource/sh_tmu.c

index 11bf4c1e25c0ae9a562972ff0f80d8d0f7df7b0c..c98b4574c44eb4db66f16097a299b824774a2b39 100644 (file)
@@ -72,8 +72,8 @@ void __init plat_prepare_cpus(unsigned int max_cpus)
        BUILD_BUG_ON(SMP_MSG_NR >= 8);
 
        for (i = 0; i < SMP_MSG_NR; i++)
-               request_irq(104 + i, ipi_interrupt_handler, IRQF_DISABLED,
-                           "IPI", (void *)(long)i);
+               request_irq(104 + i, ipi_interrupt_handler,
+                           IRQF_DISABLED | IRQF_PERCPU, "IPI", (void *)(long)i);
 }
 
 void plat_start_cpu(unsigned int cpu, unsigned long entry_point)
index c5f66171a713ff39481a536251ebcef582baa663..45be4dcb9514d9d0ac44949acb1c6c6cfbd8cd64 100644 (file)
@@ -605,7 +605,8 @@ static int sh_cmt_setup(struct sh_cmt_priv *p, struct platform_device *pdev)
        p->irqaction.name = dev_name(&p->pdev->dev);
        p->irqaction.handler = sh_cmt_interrupt;
        p->irqaction.dev_id = p;
-       p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL;
+       p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | \
+                            IRQF_IRQPOLL  | IRQF_NOBALANCING;
 
        /* get hold of clock */
        p->clk = clk_get(&p->pdev->dev, "cmt_fck");
index b11882e0f1bd6ca595704a0c5adc3884abf5e921..644ecbbed256da5fdbbb5ea13d78927f4bce4854 100644 (file)
@@ -280,7 +280,8 @@ static int sh_mtu2_setup(struct sh_mtu2_priv *p, struct platform_device *pdev)
        p->irqaction.handler = sh_mtu2_interrupt;
        p->irqaction.dev_id = p;
        p->irqaction.irq = irq;
-       p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL;
+       p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | \
+                            IRQF_IRQPOLL  | IRQF_NOBALANCING;
 
        /* get hold of clock */
        p->clk = clk_get(&p->pdev->dev, "mtu2_fck");
index 6b62283c1abab83d9d9ed936ea101d9a53ff0c81..44c39a3637680271d48ddd09f764b35b31d8675b 100644 (file)
@@ -384,7 +384,8 @@ static int sh_tmu_setup(struct sh_tmu_priv *p, struct platform_device *pdev)
        p->irqaction.handler = sh_tmu_interrupt;
        p->irqaction.dev_id = p;
        p->irqaction.irq = irq;
-       p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL;
+       p->irqaction.flags = IRQF_DISABLED | IRQF_TIMER | \
+                            IRQF_IRQPOLL  | IRQF_NOBALANCING;
 
        /* get hold of clock */
        p->clk = clk_get(&p->pdev->dev, "tmu_fck");