| From 1322ac36bc746ca63e1968e96b8945ee1ab85fff Mon Sep 17 00:00:00 2001 |
| From: Will Deacon <will.deacon@arm.com> |
| Date: Wed, 20 Jul 2011 14:18:46 +0100 |
| Subject: ARM: twd: register clockevents device before enabling PPI |
| |
| The smp_twd clockevents driver currently enables the local timer PPI |
| before the clockevents device is registered. This can lead to a kernel |
| panic if a spurious timer interrupt is generated before registration |
| has completed since the kernel will treat it as an IPI timer. |
| |
| This patch moves the clockevents device registration before the IRQ |
| unmasking so that we can always handle timer interrupts once they can |
| occur. |
| |
| Acked-by: Marc Zyngier <marc.zyngier@arm.com> |
| Signed-off-by: Will Deacon <will.deacon@arm.com> |
| (cherry picked from commit dfc40b24c0a37593724f3317cd485c73ee878c18) |
| |
| Signed-off-by: Simon Horman <horms@verge.net.au> |
| --- |
| arch/arm/kernel/smp_twd.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/arm/kernel/smp_twd.c b/arch/arm/kernel/smp_twd.c |
| index 2c277d4..01c1862 100644 |
| --- a/arch/arm/kernel/smp_twd.c |
| +++ b/arch/arm/kernel/smp_twd.c |
| @@ -137,8 +137,8 @@ void __cpuinit twd_timer_setup(struct clock_event_device *clk) |
| clk->max_delta_ns = clockevent_delta2ns(0xffffffff, clk); |
| clk->min_delta_ns = clockevent_delta2ns(0xf, clk); |
| |
| + clockevents_register_device(clk); |
| + |
| /* Make sure our local interrupt controller has this enabled */ |
| gic_enable_ppi(clk->irq); |
| - |
| - clockevents_register_device(clk); |
| } |
| -- |
| 1.7.10.2.565.gbd578b5 |
| |