summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKrzysztof Kozlowski <k.kozlowski@samsung.com>2014-04-01 11:30:24 +0200
committerMarek Szyprowski <m.szyprowski@samsung.com>2014-04-01 04:20:13 -0700
commitfe86e4ed5b3ae86af9557e062cc17595a15f3bf9 (patch)
treee3c6cbc1c90793b9f10d651a6de9456d264770f3
parentf8b74f434d8be4b16282e1a153d59a89c069e792 (diff)
downloadlinux-3.10-fe86e4ed5b3ae86af9557e062cc17595a15f3bf9.tar.gz
linux-3.10-fe86e4ed5b3ae86af9557e062cc17595a15f3bf9.tar.bz2
linux-3.10-fe86e4ed5b3ae86af9557e062cc17595a15f3bf9.zip
clocksource: exynos_mct: Fix too early ISR fire up on wrong CPU
After hotplugging CPU1 the first interrupt handler for CPU1 oneshot timer was called on CPU0 because it fired up before setting IRQ affinity. During setup of the MCT timers the clock event device should be registered after setting the affinity for interrupt. This will prevent starting the timer to early. Additionally, if clock event device has interrupt set up, the clockevents_config_and_register() will also set the affinity for it. Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com> Change-Id: I64fee65b57106ad562f0ecc1160748a9548debad
-rw-r--r--drivers/clocksource/exynos_mct.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/clocksource/exynos_mct.c b/drivers/clocksource/exynos_mct.c
index 2c627bd653e..a74e49a2e79 100644
--- a/drivers/clocksource/exynos_mct.c
+++ b/drivers/clocksource/exynos_mct.c
@@ -437,8 +437,6 @@ static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt)
evt->set_mode = exynos4_tick_set_mode;
evt->features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT;
evt->rating = 450;
- clockevents_config_and_register(evt, clk_rate / (TICK_BASE_CNT + 1),
- 0xf, 0x7fffffff);
exynos4_mct_write(TICK_BASE_CNT, mevt->base + MCT_L_TCNTB_OFFSET);
@@ -456,6 +454,8 @@ static int __cpuinit exynos4_local_timer_setup(struct clock_event_device *evt)
} else {
enable_percpu_irq(mct_irqs[MCT_L0_IRQ], 0);
}
+ clockevents_config_and_register(evt, clk_rate / (TICK_BASE_CNT + 1),
+ 0xf, 0x7fffffff);
return 0;
}