diff options
Diffstat (limited to 'arch/arm/mach-exynos/mct.c')
| -rw-r--r-- | arch/arm/mach-exynos/mct.c | 13 | 
1 files changed, 10 insertions, 3 deletions
diff --git a/arch/arm/mach-exynos/mct.c b/arch/arm/mach-exynos/mct.c index 97343df8f13..85b5527d091 100644 --- a/arch/arm/mach-exynos/mct.c +++ b/arch/arm/mach-exynos/mct.c @@ -44,8 +44,6 @@ struct mct_clock_event_device {  	char name[10];  }; -static DEFINE_PER_CPU(struct mct_clock_event_device, percpu_mct_tick); -  static void exynos4_mct_write(unsigned int value, void *addr)  {  	void __iomem *stat_addr; @@ -264,6 +262,9 @@ static void exynos4_clockevent_init(void)  }  #ifdef CONFIG_LOCAL_TIMERS + +static DEFINE_PER_CPU(struct mct_clock_event_device, percpu_mct_tick); +  /* Clock event handling */  static void exynos4_mct_tick_stop(struct mct_clock_event_device *mevt)  { @@ -428,9 +429,13 @@ int __cpuinit local_timer_setup(struct clock_event_device *evt)  void local_timer_stop(struct clock_event_device *evt)  { +	unsigned int cpu = smp_processor_id();  	evt->set_mode(CLOCK_EVT_MODE_UNUSED, evt);  	if (mct_int_type == MCT_INT_SPI) -		disable_irq(evt->irq); +		if (cpu == 0) +			remove_irq(evt->irq, &mct_tick0_event_irq); +		else +			remove_irq(evt->irq, &mct_tick1_event_irq);  	else  		disable_percpu_irq(IRQ_MCT_LOCALTIMER);  } @@ -443,6 +448,7 @@ static void __init exynos4_timer_resources(void)  	clk_rate = clk_get_rate(mct_clk); +#ifdef CONFIG_LOCAL_TIMERS  	if (mct_int_type == MCT_INT_PPI) {  		int err; @@ -452,6 +458,7 @@ static void __init exynos4_timer_resources(void)  		WARN(err, "MCT: can't request IRQ %d (%d)\n",  		     IRQ_MCT_LOCALTIMER, err);  	} +#endif /* CONFIG_LOCAL_TIMERS */  }  static void __init exynos4_timer_init(void)  |