diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2008-02-01 16:27:02 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-02-04 08:14:07 -0500 |
commit | 66a2c077c36ee5c56e77ba3757702c4464011da6 (patch) | |
tree | 7a6d3f59e540f26f866fe7ed38ad01a01311a1a4 /arch | |
parent | 2f65baff3ab546d011b0e3f944eccd1ec5816d5d (diff) |
[ARM] xtime_seqlock: fix more ARM machines for xtime deadlocking
move update_process_times() out from under xtime_lock.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/common/time-acorn.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-at91/at91sam926x_time.c | 3 | ||||
-rw-r--r-- | arch/arm/plat-iop/time.c | 4 | ||||
-rw-r--r-- | arch/arm/plat-s3c24xx/time.c | 2 |
4 files changed, 0 insertions, 11 deletions
diff --git a/arch/arm/common/time-acorn.c b/arch/arm/common/time-acorn.c index 34038eccbba9..d544da414731 100644 --- a/arch/arm/common/time-acorn.c +++ b/arch/arm/common/time-acorn.c | |||
@@ -69,9 +69,7 @@ void __init ioctime_init(void) | |||
69 | static irqreturn_t | 69 | static irqreturn_t |
70 | ioc_timer_interrupt(int irq, void *dev_id) | 70 | ioc_timer_interrupt(int irq, void *dev_id) |
71 | { | 71 | { |
72 | write_seqlock(&xtime_lock); | ||
73 | timer_tick(); | 72 | timer_tick(); |
74 | write_sequnlock(&xtime_lock); | ||
75 | return IRQ_HANDLED; | 73 | return IRQ_HANDLED; |
76 | } | 74 | } |
77 | 75 | ||
diff --git a/arch/arm/mach-at91/at91sam926x_time.c b/arch/arm/mach-at91/at91sam926x_time.c index 5c090c9442f5..e38d23770992 100644 --- a/arch/arm/mach-at91/at91sam926x_time.c +++ b/arch/arm/mach-at91/at91sam926x_time.c | |||
@@ -49,8 +49,6 @@ static irqreturn_t at91sam926x_timer_interrupt(int irq, void *dev_id) | |||
49 | volatile long nr_ticks; | 49 | volatile long nr_ticks; |
50 | 50 | ||
51 | if (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS) { /* This is a shared interrupt */ | 51 | if (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS) { /* This is a shared interrupt */ |
52 | write_seqlock(&xtime_lock); | ||
53 | |||
54 | /* Get number to ticks performed before interrupt and clear PIT interrupt */ | 52 | /* Get number to ticks performed before interrupt and clear PIT interrupt */ |
55 | nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); | 53 | nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); |
56 | do { | 54 | do { |
@@ -58,7 +56,6 @@ static irqreturn_t at91sam926x_timer_interrupt(int irq, void *dev_id) | |||
58 | nr_ticks--; | 56 | nr_ticks--; |
59 | } while (nr_ticks); | 57 | } while (nr_ticks); |
60 | 58 | ||
61 | write_sequnlock(&xtime_lock); | ||
62 | return IRQ_HANDLED; | 59 | return IRQ_HANDLED; |
63 | } else | 60 | } else |
64 | return IRQ_NONE; /* not handled */ | 61 | return IRQ_NONE; /* not handled */ |
diff --git a/arch/arm/plat-iop/time.c b/arch/arm/plat-iop/time.c index ba3d21d8fba3..6fe481ff4fdf 100644 --- a/arch/arm/plat-iop/time.c +++ b/arch/arm/plat-iop/time.c | |||
@@ -57,8 +57,6 @@ unsigned long iop_gettimeoffset(void) | |||
57 | static irqreturn_t | 57 | static irqreturn_t |
58 | iop_timer_interrupt(int irq, void *dev_id) | 58 | iop_timer_interrupt(int irq, void *dev_id) |
59 | { | 59 | { |
60 | write_seqlock(&xtime_lock); | ||
61 | |||
62 | write_tisr(1); | 60 | write_tisr(1); |
63 | 61 | ||
64 | while ((signed long)(next_jiffy_time - read_tcr1()) | 62 | while ((signed long)(next_jiffy_time - read_tcr1()) |
@@ -67,8 +65,6 @@ iop_timer_interrupt(int irq, void *dev_id) | |||
67 | next_jiffy_time -= ticks_per_jiffy; | 65 | next_jiffy_time -= ticks_per_jiffy; |
68 | } | 66 | } |
69 | 67 | ||
70 | write_sequnlock(&xtime_lock); | ||
71 | |||
72 | return IRQ_HANDLED; | 68 | return IRQ_HANDLED; |
73 | } | 69 | } |
74 | 70 | ||
diff --git a/arch/arm/plat-s3c24xx/time.c b/arch/arm/plat-s3c24xx/time.c index 2ec1daaa0e53..766473b3f98b 100644 --- a/arch/arm/plat-s3c24xx/time.c +++ b/arch/arm/plat-s3c24xx/time.c | |||
@@ -130,9 +130,7 @@ static unsigned long s3c2410_gettimeoffset (void) | |||
130 | static irqreturn_t | 130 | static irqreturn_t |
131 | s3c2410_timer_interrupt(int irq, void *dev_id) | 131 | s3c2410_timer_interrupt(int irq, void *dev_id) |
132 | { | 132 | { |
133 | write_seqlock(&xtime_lock); | ||
134 | timer_tick(); | 133 | timer_tick(); |
135 | write_sequnlock(&xtime_lock); | ||
136 | return IRQ_HANDLED; | 134 | return IRQ_HANDLED; |
137 | } | 135 | } |
138 | 136 | ||