diff options
author | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2014-04-01 11:30:24 +0200 |
---|---|---|
committer | Marek Szyprowski <m.szyprowski@samsung.com> | 2014-04-01 04:20:13 -0700 |
commit | fe86e4ed5b3ae86af9557e062cc17595a15f3bf9 (patch) | |
tree | e3c6cbc1c90793b9f10d651a6de9456d264770f3 | |
parent | f8b74f434d8be4b16282e1a153d59a89c069e792 (diff) | |
download | linux-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.c | 4 |
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; } |