aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-footbridge
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2008-01-28 05:16:37 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2008-01-28 05:17:12 -0500
commit193c3cc12583344be01206078d9ad3fec5dbc397 (patch)
tree97eb5d6ec88969d21fbf0c5815e3b77e8e1f4aaf /arch/arm/mach-footbridge
parent6232be32afa121628c72291ce7eaa24a639905c2 (diff)
[ARM] Fix timer damage from d3d74453c34f8fd87674a8cf5b8a327c68f22e99
Move the xtime write mode seqlock into timer_tick(), so it only surrounds the call to do_timer(). This avoids a deadlock in update_process_times() ... hrtimer_get_softirq_time() which tries to get a read mode seqlock on xtime, thereby preventing booting. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mach-footbridge')
-rw-r--r--arch/arm/mach-footbridge/dc21285-timer.c4
-rw-r--r--arch/arm/mach-footbridge/isa-timer.c2
2 files changed, 0 insertions, 6 deletions
diff --git a/arch/arm/mach-footbridge/dc21285-timer.c b/arch/arm/mach-footbridge/dc21285-timer.c
index 3a63941d43be..b2a21189dd81 100644
--- a/arch/arm/mach-footbridge/dc21285-timer.c
+++ b/arch/arm/mach-footbridge/dc21285-timer.c
@@ -30,14 +30,10 @@ static unsigned long timer1_gettimeoffset (void)
30static irqreturn_t 30static irqreturn_t
31timer1_interrupt(int irq, void *dev_id) 31timer1_interrupt(int irq, void *dev_id)
32{ 32{
33 write_seqlock(&xtime_lock);
34
35 *CSR_TIMER1_CLR = 0; 33 *CSR_TIMER1_CLR = 0;
36 34
37 timer_tick(); 35 timer_tick();
38 36
39 write_sequnlock(&xtime_lock);
40
41 return IRQ_HANDLED; 37 return IRQ_HANDLED;
42} 38}
43 39
diff --git a/arch/arm/mach-footbridge/isa-timer.c b/arch/arm/mach-footbridge/isa-timer.c
index d08d64139d00..a764e01d3573 100644
--- a/arch/arm/mach-footbridge/isa-timer.c
+++ b/arch/arm/mach-footbridge/isa-timer.c
@@ -64,9 +64,7 @@ static unsigned long isa_gettimeoffset(void)
64static irqreturn_t 64static irqreturn_t
65isa_timer_interrupt(int irq, void *dev_id) 65isa_timer_interrupt(int irq, void *dev_id)
66{ 66{
67 write_seqlock(&xtime_lock);
68 timer_tick(); 67 timer_tick();
69 write_sequnlock(&xtime_lock);
70 return IRQ_HANDLED; 68 return IRQ_HANDLED;
71} 69}
72 70