diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2008-01-28 05:16:37 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-01-28 05:17:12 -0500 |
commit | 193c3cc12583344be01206078d9ad3fec5dbc397 (patch) | |
tree | 97eb5d6ec88969d21fbf0c5815e3b77e8e1f4aaf /arch/arm/mach-footbridge | |
parent | 6232be32afa121628c72291ce7eaa24a639905c2 (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.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-footbridge/isa-timer.c | 2 |
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) | |||
30 | static irqreturn_t | 30 | static irqreturn_t |
31 | timer1_interrupt(int irq, void *dev_id) | 31 | timer1_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) | |||
64 | static irqreturn_t | 64 | static irqreturn_t |
65 | isa_timer_interrupt(int irq, void *dev_id) | 65 | isa_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 | ||