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 | |
| 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>
| -rw-r--r-- | arch/arm/kernel/time.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-aaec2000/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-clps711x/time.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-clps7500/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-ebsa110/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-ep93xx/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-footbridge/dc21285-timer.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-footbridge/isa-timer.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-h720x/cpu-h7201.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-h720x/cpu-h7202.c | 2 | ||||
| -rw-r--r-- | arch/arm/mach-integrator/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-ixp2000/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-ks8695/time.c | 3 | ||||
| -rw-r--r-- | arch/arm/mach-lh7a40x/time.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-mx3/time.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-netx/time.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/timer-gp.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-pnx4008/time.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-realview/core.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-sa1100/time.c | 4 | ||||
| -rw-r--r-- | arch/arm/mach-shark/core.c | 2 |
21 files changed, 2 insertions, 71 deletions
diff --git a/arch/arm/kernel/time.c b/arch/arm/kernel/time.c index e59b5b84168d..b5867eca1d0b 100644 --- a/arch/arm/kernel/time.c +++ b/arch/arm/kernel/time.c | |||
| @@ -325,7 +325,9 @@ void timer_tick(void) | |||
| 325 | profile_tick(CPU_PROFILING); | 325 | profile_tick(CPU_PROFILING); |
| 326 | do_leds(); | 326 | do_leds(); |
| 327 | do_set_rtc(); | 327 | do_set_rtc(); |
| 328 | write_seqlock(&xtime_lock); | ||
| 328 | do_timer(1); | 329 | do_timer(1); |
| 330 | write_sequnlock(&xtime_lock); | ||
| 329 | #ifndef CONFIG_SMP | 331 | #ifndef CONFIG_SMP |
| 330 | update_process_times(user_mode(get_irq_regs())); | 332 | update_process_times(user_mode(get_irq_regs())); |
| 331 | #endif | 333 | #endif |
diff --git a/arch/arm/mach-aaec2000/core.c b/arch/arm/mach-aaec2000/core.c index 0446ef2f5bd6..b016be2b0e35 100644 --- a/arch/arm/mach-aaec2000/core.c +++ b/arch/arm/mach-aaec2000/core.c | |||
| @@ -130,13 +130,9 @@ static irqreturn_t | |||
| 130 | aaec2000_timer_interrupt(int irq, void *dev_id) | 130 | aaec2000_timer_interrupt(int irq, void *dev_id) |
| 131 | { | 131 | { |
| 132 | /* TODO: Check timer accuracy */ | 132 | /* TODO: Check timer accuracy */ |
| 133 | write_seqlock(&xtime_lock); | ||
| 134 | |||
| 135 | timer_tick(); | 133 | timer_tick(); |
| 136 | TIMER1_CLEAR = 1; | 134 | TIMER1_CLEAR = 1; |
| 137 | 135 | ||
| 138 | write_sequnlock(&xtime_lock); | ||
| 139 | |||
| 140 | return IRQ_HANDLED; | 136 | return IRQ_HANDLED; |
| 141 | } | 137 | } |
| 142 | 138 | ||
diff --git a/arch/arm/mach-clps711x/time.c b/arch/arm/mach-clps711x/time.c index f428af7545b4..e5dc33f1f95c 100644 --- a/arch/arm/mach-clps711x/time.c +++ b/arch/arm/mach-clps711x/time.c | |||
| @@ -50,9 +50,7 @@ static unsigned long clps711x_gettimeoffset(void) | |||
| 50 | static irqreturn_t | 50 | static irqreturn_t |
| 51 | p720t_timer_interrupt(int irq, void *dev_id) | 51 | p720t_timer_interrupt(int irq, void *dev_id) |
| 52 | { | 52 | { |
| 53 | write_seqlock(&xtime_lock); | ||
| 54 | timer_tick(); | 53 | timer_tick(); |
| 55 | write_sequnlock(&xtime_lock); | ||
| 56 | return IRQ_HANDLED; | 54 | return IRQ_HANDLED; |
| 57 | } | 55 | } |
| 58 | 56 | ||
diff --git a/arch/arm/mach-clps7500/core.c b/arch/arm/mach-clps7500/core.c index 986205ec9269..2ac63671ea5f 100644 --- a/arch/arm/mach-clps7500/core.c +++ b/arch/arm/mach-clps7500/core.c | |||
| @@ -298,8 +298,6 @@ extern unsigned long ioc_timer_gettimeoffset(void); | |||
| 298 | static irqreturn_t | 298 | static irqreturn_t |
| 299 | clps7500_timer_interrupt(int irq, void *dev_id) | 299 | clps7500_timer_interrupt(int irq, void *dev_id) |
| 300 | { | 300 | { |
| 301 | write_seqlock(&xtime_lock); | ||
| 302 | |||
| 303 | timer_tick(); | 301 | timer_tick(); |
| 304 | 302 | ||
| 305 | /* Why not using do_leds interface?? */ | 303 | /* Why not using do_leds interface?? */ |
| @@ -313,8 +311,6 @@ clps7500_timer_interrupt(int irq, void *dev_id) | |||
| 313 | } | 311 | } |
| 314 | } | 312 | } |
| 315 | 313 | ||
| 316 | write_sequnlock(&xtime_lock); | ||
| 317 | |||
| 318 | return IRQ_HANDLED; | 314 | return IRQ_HANDLED; |
| 319 | } | 315 | } |
| 320 | 316 | ||
diff --git a/arch/arm/mach-ebsa110/core.c b/arch/arm/mach-ebsa110/core.c index 8c1b5690dfe8..7710e14b5268 100644 --- a/arch/arm/mach-ebsa110/core.c +++ b/arch/arm/mach-ebsa110/core.c | |||
| @@ -178,8 +178,6 @@ ebsa110_timer_interrupt(int irq, void *dev_id) | |||
| 178 | { | 178 | { |
| 179 | u32 count; | 179 | u32 count; |
| 180 | 180 | ||
| 181 | write_seqlock(&xtime_lock); | ||
| 182 | |||
| 183 | /* latch and read timer 1 */ | 181 | /* latch and read timer 1 */ |
| 184 | __raw_writeb(0x40, PIT_CTRL); | 182 | __raw_writeb(0x40, PIT_CTRL); |
| 185 | count = __raw_readb(PIT_T1); | 183 | count = __raw_readb(PIT_T1); |
| @@ -192,8 +190,6 @@ ebsa110_timer_interrupt(int irq, void *dev_id) | |||
| 192 | 190 | ||
| 193 | timer_tick(); | 191 | timer_tick(); |
| 194 | 192 | ||
| 195 | write_sequnlock(&xtime_lock); | ||
| 196 | |||
| 197 | return IRQ_HANDLED; | 193 | return IRQ_HANDLED; |
| 198 | } | 194 | } |
| 199 | 195 | ||
diff --git a/arch/arm/mach-ep93xx/core.c b/arch/arm/mach-ep93xx/core.c index 70b2c7801110..f1074ff02fdb 100644 --- a/arch/arm/mach-ep93xx/core.c +++ b/arch/arm/mach-ep93xx/core.c | |||
| @@ -99,8 +99,6 @@ static unsigned int last_jiffy_time; | |||
| 99 | 99 | ||
| 100 | static int ep93xx_timer_interrupt(int irq, void *dev_id) | 100 | static int ep93xx_timer_interrupt(int irq, void *dev_id) |
| 101 | { | 101 | { |
| 102 | write_seqlock(&xtime_lock); | ||
| 103 | |||
| 104 | __raw_writel(1, EP93XX_TIMER1_CLEAR); | 102 | __raw_writel(1, EP93XX_TIMER1_CLEAR); |
| 105 | while ((signed long) | 103 | while ((signed long) |
| 106 | (__raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time) | 104 | (__raw_readl(EP93XX_TIMER4_VALUE_LOW) - last_jiffy_time) |
| @@ -109,8 +107,6 @@ static int ep93xx_timer_interrupt(int irq, void *dev_id) | |||
| 109 | timer_tick(); | 107 | timer_tick(); |
| 110 | } | 108 | } |
| 111 | 109 | ||
| 112 | write_sequnlock(&xtime_lock); | ||
| 113 | |||
| 114 | return IRQ_HANDLED; | 110 | return IRQ_HANDLED; |
| 115 | } | 111 | } |
| 116 | 112 | ||
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 | ||
diff --git a/arch/arm/mach-h720x/cpu-h7201.c b/arch/arm/mach-h720x/cpu-h7201.c index 9107b8e2ad6e..c2a431f482f0 100644 --- a/arch/arm/mach-h720x/cpu-h7201.c +++ b/arch/arm/mach-h720x/cpu-h7201.c | |||
| @@ -29,13 +29,9 @@ | |||
| 29 | static irqreturn_t | 29 | static irqreturn_t |
| 30 | h7201_timer_interrupt(int irq, void *dev_id) | 30 | h7201_timer_interrupt(int irq, void *dev_id) |
| 31 | { | 31 | { |
| 32 | write_seqlock(&xtime_lock); | ||
| 33 | |||
| 34 | CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); | 32 | CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); |
| 35 | timer_tick(); | 33 | timer_tick(); |
| 36 | 34 | ||
| 37 | write_sequnlock(&xtime_lock); | ||
| 38 | |||
| 39 | return IRQ_HANDLED; | 35 | return IRQ_HANDLED; |
| 40 | } | 36 | } |
| 41 | 37 | ||
diff --git a/arch/arm/mach-h720x/cpu-h7202.c b/arch/arm/mach-h720x/cpu-h7202.c index 0a1a25fb8ba8..c627fa124eb3 100644 --- a/arch/arm/mach-h720x/cpu-h7202.c +++ b/arch/arm/mach-h720x/cpu-h7202.c | |||
| @@ -113,9 +113,7 @@ h7202_timerx_demux_handler(unsigned int irq_unused, struct irq_desc *desc) | |||
| 113 | mask = CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); | 113 | mask = CPU_REG (TIMER_VIRT, TIMER_TOPSTAT); |
| 114 | 114 | ||
| 115 | if ( mask & TSTAT_T0INT ) { | 115 | if ( mask & TSTAT_T0INT ) { |
| 116 | write_seqlock(&xtime_lock); | ||
| 117 | timer_tick(); | 116 | timer_tick(); |
| 118 | write_sequnlock(&xtime_lock); | ||
| 119 | if( mask == TSTAT_T0INT ) | 117 | if( mask == TSTAT_T0INT ) |
| 120 | return; | 118 | return; |
| 121 | } | 119 | } |
diff --git a/arch/arm/mach-integrator/core.c b/arch/arm/mach-integrator/core.c index e9c82deb791d..7fbbc17f8e8b 100644 --- a/arch/arm/mach-integrator/core.c +++ b/arch/arm/mach-integrator/core.c | |||
| @@ -250,8 +250,6 @@ unsigned long integrator_gettimeoffset(void) | |||
| 250 | static irqreturn_t | 250 | static irqreturn_t |
| 251 | integrator_timer_interrupt(int irq, void *dev_id) | 251 | integrator_timer_interrupt(int irq, void *dev_id) |
| 252 | { | 252 | { |
| 253 | write_seqlock(&xtime_lock); | ||
| 254 | |||
| 255 | /* | 253 | /* |
| 256 | * clear the interrupt | 254 | * clear the interrupt |
| 257 | */ | 255 | */ |
| @@ -259,8 +257,6 @@ integrator_timer_interrupt(int irq, void *dev_id) | |||
| 259 | 257 | ||
| 260 | timer_tick(); | 258 | timer_tick(); |
| 261 | 259 | ||
| 262 | write_sequnlock(&xtime_lock); | ||
| 263 | |||
| 264 | return IRQ_HANDLED; | 260 | return IRQ_HANDLED; |
| 265 | } | 261 | } |
| 266 | 262 | ||
diff --git a/arch/arm/mach-ixp2000/core.c b/arch/arm/mach-ixp2000/core.c index cb6ad211887a..81cdc8267206 100644 --- a/arch/arm/mach-ixp2000/core.c +++ b/arch/arm/mach-ixp2000/core.c | |||
| @@ -206,8 +206,6 @@ unsigned long ixp2000_gettimeoffset (void) | |||
| 206 | 206 | ||
| 207 | static int ixp2000_timer_interrupt(int irq, void *dev_id) | 207 | static int ixp2000_timer_interrupt(int irq, void *dev_id) |
| 208 | { | 208 | { |
| 209 | write_seqlock(&xtime_lock); | ||
| 210 | |||
| 211 | /* clear timer 1 */ | 209 | /* clear timer 1 */ |
| 212 | ixp2000_reg_wrb(IXP2000_T1_CLR, 1); | 210 | ixp2000_reg_wrb(IXP2000_T1_CLR, 1); |
| 213 | 211 | ||
| @@ -217,8 +215,6 @@ static int ixp2000_timer_interrupt(int irq, void *dev_id) | |||
| 217 | next_jiffy_time -= ticks_per_jiffy; | 215 | next_jiffy_time -= ticks_per_jiffy; |
| 218 | } | 216 | } |
| 219 | 217 | ||
| 220 | write_sequnlock(&xtime_lock); | ||
| 221 | |||
| 222 | return IRQ_HANDLED; | 218 | return IRQ_HANDLED; |
| 223 | } | 219 | } |
| 224 | 220 | ||
diff --git a/arch/arm/mach-ks8695/time.c b/arch/arm/mach-ks8695/time.c index d2c86e4a72eb..02f766b3121d 100644 --- a/arch/arm/mach-ks8695/time.c +++ b/arch/arm/mach-ks8695/time.c | |||
| @@ -70,10 +70,7 @@ static unsigned long ks8695_gettimeoffset (void) | |||
| 70 | */ | 70 | */ |
| 71 | static irqreturn_t ks8695_timer_interrupt(int irq, void *dev_id) | 71 | static irqreturn_t ks8695_timer_interrupt(int irq, void *dev_id) |
| 72 | { | 72 | { |
| 73 | write_seqlock(&xtime_lock); | ||
| 74 | timer_tick(); | 73 | timer_tick(); |
| 75 | write_sequnlock(&xtime_lock); | ||
| 76 | |||
| 77 | return IRQ_HANDLED; | 74 | return IRQ_HANDLED; |
| 78 | } | 75 | } |
| 79 | 76 | ||
diff --git a/arch/arm/mach-lh7a40x/time.c b/arch/arm/mach-lh7a40x/time.c index c25316d02537..e50e60b33851 100644 --- a/arch/arm/mach-lh7a40x/time.c +++ b/arch/arm/mach-lh7a40x/time.c | |||
| @@ -41,13 +41,9 @@ | |||
| 41 | static irqreturn_t | 41 | static irqreturn_t |
| 42 | lh7a40x_timer_interrupt(int irq, void *dev_id) | 42 | lh7a40x_timer_interrupt(int irq, void *dev_id) |
| 43 | { | 43 | { |
| 44 | write_seqlock(&xtime_lock); | ||
| 45 | |||
| 46 | TIMER_EOI = 0; | 44 | TIMER_EOI = 0; |
| 47 | timer_tick(); | 45 | timer_tick(); |
| 48 | 46 | ||
| 49 | write_sequnlock(&xtime_lock); | ||
| 50 | |||
| 51 | return IRQ_HANDLED; | 47 | return IRQ_HANDLED; |
| 52 | } | 48 | } |
| 53 | 49 | ||
diff --git a/arch/arm/mach-mx3/time.c b/arch/arm/mach-mx3/time.c index e81fb5c5d7c3..fb565c98dbfb 100644 --- a/arch/arm/mach-mx3/time.c +++ b/arch/arm/mach-mx3/time.c | |||
| @@ -45,8 +45,6 @@ static irqreturn_t mxc_timer_interrupt(int irq, void *dev_id) | |||
| 45 | { | 45 | { |
| 46 | unsigned int next_match; | 46 | unsigned int next_match; |
| 47 | 47 | ||
| 48 | write_seqlock(&xtime_lock); | ||
| 49 | |||
| 50 | if (__raw_readl(MXC_GPT_GPTSR) & GPTSR_OF1) { | 48 | if (__raw_readl(MXC_GPT_GPTSR) & GPTSR_OF1) { |
| 51 | do { | 49 | do { |
| 52 | timer_tick(); | 50 | timer_tick(); |
| @@ -57,8 +55,6 @@ static irqreturn_t mxc_timer_interrupt(int irq, void *dev_id) | |||
| 57 | __raw_readl(MXC_GPT_GPTCNT)) <= 0); | 55 | __raw_readl(MXC_GPT_GPTCNT)) <= 0); |
| 58 | } | 56 | } |
| 59 | 57 | ||
| 60 | write_sequnlock(&xtime_lock); | ||
| 61 | |||
| 62 | return IRQ_HANDLED; | 58 | return IRQ_HANDLED; |
| 63 | } | 59 | } |
| 64 | 60 | ||
diff --git a/arch/arm/mach-netx/time.c b/arch/arm/mach-netx/time.c index 4762e207b0bf..ea07b54afa59 100644 --- a/arch/arm/mach-netx/time.c +++ b/arch/arm/mach-netx/time.c | |||
| @@ -33,12 +33,8 @@ | |||
| 33 | static irqreturn_t | 33 | static irqreturn_t |
| 34 | netx_timer_interrupt(int irq, void *dev_id) | 34 | netx_timer_interrupt(int irq, void *dev_id) |
| 35 | { | 35 | { |
| 36 | write_seqlock(&xtime_lock); | ||
| 37 | |||
| 38 | timer_tick(); | 36 | timer_tick(); |
| 39 | 37 | ||
| 40 | write_sequnlock(&xtime_lock); | ||
| 41 | |||
| 42 | /* acknowledge interrupt */ | 38 | /* acknowledge interrupt */ |
| 43 | writel(COUNTER_BIT(0), NETX_GPIO_IRQ); | 39 | writel(COUNTER_BIT(0), NETX_GPIO_IRQ); |
| 44 | 40 | ||
diff --git a/arch/arm/mach-omap2/timer-gp.c b/arch/arm/mach-omap2/timer-gp.c index 8d322c20ccae..3234deedb946 100644 --- a/arch/arm/mach-omap2/timer-gp.c +++ b/arch/arm/mach-omap2/timer-gp.c | |||
| @@ -40,13 +40,9 @@ static inline void omap2_gp_timer_start(unsigned long load_val) | |||
| 40 | 40 | ||
| 41 | static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id) | 41 | static irqreturn_t omap2_gp_timer_interrupt(int irq, void *dev_id) |
| 42 | { | 42 | { |
| 43 | write_seqlock(&xtime_lock); | ||
| 44 | |||
| 45 | omap_dm_timer_write_status(gptimer, OMAP_TIMER_INT_OVERFLOW); | 43 | omap_dm_timer_write_status(gptimer, OMAP_TIMER_INT_OVERFLOW); |
| 46 | timer_tick(); | 44 | timer_tick(); |
| 47 | 45 | ||
| 48 | write_sequnlock(&xtime_lock); | ||
| 49 | |||
| 50 | return IRQ_HANDLED; | 46 | return IRQ_HANDLED; |
| 51 | } | 47 | } |
| 52 | 48 | ||
diff --git a/arch/arm/mach-pnx4008/time.c b/arch/arm/mach-pnx4008/time.c index 67e05f005a6b..6d4ca8fc0cb4 100644 --- a/arch/arm/mach-pnx4008/time.c +++ b/arch/arm/mach-pnx4008/time.c | |||
| @@ -51,8 +51,6 @@ static irqreturn_t pnx4008_timer_interrupt(int irq, void *dev_id) | |||
| 51 | { | 51 | { |
| 52 | if (__raw_readl(HSTIM_INT) & MATCH0_INT) { | 52 | if (__raw_readl(HSTIM_INT) & MATCH0_INT) { |
| 53 | 53 | ||
| 54 | write_seqlock(&xtime_lock); | ||
| 55 | |||
| 56 | do { | 54 | do { |
| 57 | timer_tick(); | 55 | timer_tick(); |
| 58 | 56 | ||
| @@ -73,8 +71,6 @@ static irqreturn_t pnx4008_timer_interrupt(int irq, void *dev_id) | |||
| 73 | } while ((signed) | 71 | } while ((signed) |
| 74 | (__raw_readl(HSTIM_MATCH0) - | 72 | (__raw_readl(HSTIM_MATCH0) - |
| 75 | __raw_readl(HSTIM_COUNTER)) < 0); | 73 | __raw_readl(HSTIM_COUNTER)) < 0); |
| 76 | |||
| 77 | write_sequnlock(&xtime_lock); | ||
| 78 | } | 74 | } |
| 79 | 75 | ||
| 80 | return IRQ_HANDLED; | 76 | return IRQ_HANDLED; |
diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index c7f1b44da40d..61d70218f1e8 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c | |||
| @@ -530,8 +530,6 @@ static unsigned long realview_gettimeoffset(void) | |||
| 530 | */ | 530 | */ |
| 531 | static irqreturn_t realview_timer_interrupt(int irq, void *dev_id) | 531 | static irqreturn_t realview_timer_interrupt(int irq, void *dev_id) |
| 532 | { | 532 | { |
| 533 | write_seqlock(&xtime_lock); | ||
| 534 | |||
| 535 | // ...clear the interrupt | 533 | // ...clear the interrupt |
| 536 | writel(1, TIMER0_VA_BASE + TIMER_INTCLR); | 534 | writel(1, TIMER0_VA_BASE + TIMER_INTCLR); |
| 537 | 535 | ||
| @@ -542,8 +540,6 @@ static irqreturn_t realview_timer_interrupt(int irq, void *dev_id) | |||
| 542 | update_process_times(user_mode(get_irq_regs())); | 540 | update_process_times(user_mode(get_irq_regs())); |
| 543 | #endif | 541 | #endif |
| 544 | 542 | ||
| 545 | write_sequnlock(&xtime_lock); | ||
| 546 | |||
| 547 | return IRQ_HANDLED; | 543 | return IRQ_HANDLED; |
| 548 | } | 544 | } |
| 549 | 545 | ||
diff --git a/arch/arm/mach-sa1100/time.c b/arch/arm/mach-sa1100/time.c index fdf7b016e7ad..47f8640438e6 100644 --- a/arch/arm/mach-sa1100/time.c +++ b/arch/arm/mach-sa1100/time.c | |||
| @@ -62,8 +62,6 @@ sa1100_timer_interrupt(int irq, void *dev_id) | |||
| 62 | { | 62 | { |
| 63 | unsigned int next_match; | 63 | unsigned int next_match; |
| 64 | 64 | ||
| 65 | write_seqlock(&xtime_lock); | ||
| 66 | |||
| 67 | #ifdef CONFIG_NO_IDLE_HZ | 65 | #ifdef CONFIG_NO_IDLE_HZ |
| 68 | if (match_posponed) { | 66 | if (match_posponed) { |
| 69 | match_posponed = 0; | 67 | match_posponed = 0; |
| @@ -85,8 +83,6 @@ sa1100_timer_interrupt(int irq, void *dev_id) | |||
| 85 | next_match = (OSMR0 += LATCH); | 83 | next_match = (OSMR0 += LATCH); |
| 86 | } while ((signed long)(next_match - OSCR) <= 0); | 84 | } while ((signed long)(next_match - OSCR) <= 0); |
| 87 | 85 | ||
| 88 | write_sequnlock(&xtime_lock); | ||
| 89 | |||
| 90 | return IRQ_HANDLED; | 86 | return IRQ_HANDLED; |
| 91 | } | 87 | } |
| 92 | 88 | ||
diff --git a/arch/arm/mach-shark/core.c b/arch/arm/mach-shark/core.c index a0545db2a34f..09d9f33d4072 100644 --- a/arch/arm/mach-shark/core.c +++ b/arch/arm/mach-shark/core.c | |||
| @@ -82,9 +82,7 @@ static void __init shark_map_io(void) | |||
| 82 | static irqreturn_t | 82 | static irqreturn_t |
| 83 | shark_timer_interrupt(int irq, void *dev_id) | 83 | shark_timer_interrupt(int irq, void *dev_id) |
| 84 | { | 84 | { |
| 85 | write_seqlock(&xtime_lock); | ||
| 86 | timer_tick(); | 85 | timer_tick(); |
| 87 | write_sequnlock(&xtime_lock); | ||
| 88 | return IRQ_HANDLED; | 86 | return IRQ_HANDLED; |
| 89 | } | 87 | } |
| 90 | 88 | ||
