clocksource/drivers/imx: Allow timer irq affinity change
authorLucas Stach <l.stach@pengutronix.de>
Wed, 14 Oct 2015 09:24:17 +0000 (11:24 +0200)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Thu, 15 Oct 2015 15:42:05 +0000 (17:42 +0200)
Allow the timer core to change the smp affinity of the broadcast timer
irq by setting CLOCK_EVT_FEAT_DYNIRQ flag. For this to work the timer
core needs to be told about the used irq.

This reduces interrupt pressure and wakeups on CPU0 as well as vastly
reducing the number of timer broadcast IPIs.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/clocksource/timer-imx-gpt.c

index 839aba92fc395811e67e8d2ac7ba1ce7727c0bcf..99ec96769dda899817bf1ee41fd836a4e2bbbc53 100644 (file)
@@ -305,13 +305,14 @@ static int __init mxc_clockevent_init(struct imx_timer *imxtm)
        struct irqaction *act = &imxtm->act;
 
        ced->name = "mxc_timer1";
-       ced->features = CLOCK_EVT_FEAT_ONESHOT;
+       ced->features = CLOCK_EVT_FEAT_ONESHOT | CLOCK_EVT_FEAT_DYNIRQ;
        ced->set_state_shutdown = mxc_shutdown;
        ced->set_state_oneshot = mxc_set_oneshot;
        ced->tick_resume = mxc_shutdown;
        ced->set_next_event = imxtm->gpt->set_next_event;
        ced->rating = 200;
        ced->cpumask = cpumask_of(0);
+       ced->irq = imxtm->irq;
        clockevents_config_and_register(ced, clk_get_rate(imxtm->clk_per),
                                        0xff, 0xfffffffe);