[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>

authored by Peter Zijlstra and committed by Russell King 66a2c077 2f65baff

-11
-2
arch/arm/common/time-acorn.c
··· 69 static irqreturn_t 70 ioc_timer_interrupt(int irq, void *dev_id) 71 { 72 - write_seqlock(&xtime_lock); 73 timer_tick(); 74 - write_sequnlock(&xtime_lock); 75 return IRQ_HANDLED; 76 } 77
··· 69 static irqreturn_t 70 ioc_timer_interrupt(int irq, void *dev_id) 71 { 72 timer_tick(); 73 return IRQ_HANDLED; 74 } 75
-3
arch/arm/mach-at91/at91sam926x_time.c
··· 49 volatile long nr_ticks; 50 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 */ 55 nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); 56 do { ··· 56 nr_ticks--; 57 } while (nr_ticks); 58 59 - write_sequnlock(&xtime_lock); 60 return IRQ_HANDLED; 61 } else 62 return IRQ_NONE; /* not handled */
··· 49 volatile long nr_ticks; 50 51 if (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS) { /* This is a shared interrupt */ 52 /* Get number to ticks performed before interrupt and clear PIT interrupt */ 53 nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); 54 do { ··· 58 nr_ticks--; 59 } while (nr_ticks); 60 61 return IRQ_HANDLED; 62 } else 63 return IRQ_NONE; /* not handled */
-4
arch/arm/plat-iop/time.c
··· 57 static irqreturn_t 58 iop_timer_interrupt(int irq, void *dev_id) 59 { 60 - write_seqlock(&xtime_lock); 61 - 62 write_tisr(1); 63 64 while ((signed long)(next_jiffy_time - read_tcr1()) ··· 64 timer_tick(); 65 next_jiffy_time -= ticks_per_jiffy; 66 } 67 - 68 - write_sequnlock(&xtime_lock); 69 70 return IRQ_HANDLED; 71 }
··· 57 static irqreturn_t 58 iop_timer_interrupt(int irq, void *dev_id) 59 { 60 write_tisr(1); 61 62 while ((signed long)(next_jiffy_time - read_tcr1()) ··· 66 timer_tick(); 67 next_jiffy_time -= ticks_per_jiffy; 68 } 69 70 return IRQ_HANDLED; 71 }
-2
arch/arm/plat-s3c24xx/time.c
··· 130 static irqreturn_t 131 s3c2410_timer_interrupt(int irq, void *dev_id) 132 { 133 - write_seqlock(&xtime_lock); 134 timer_tick(); 135 - write_sequnlock(&xtime_lock); 136 return IRQ_HANDLED; 137 } 138
··· 130 static irqreturn_t 131 s3c2410_timer_interrupt(int irq, void *dev_id) 132 { 133 timer_tick(); 134 return IRQ_HANDLED; 135 } 136