提交 66a2c077 编写于 作者: P Peter Zijlstra 提交者: Russell King

[ARM] xtime_seqlock: fix more ARM machines for xtime deadlocking

move update_process_times() out from under xtime_lock.
Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: NRussell King <rmk+kernel@arm.linux.org.uk>
上级 2f65baff
...@@ -69,9 +69,7 @@ void __init ioctime_init(void) ...@@ -69,9 +69,7 @@ void __init ioctime_init(void)
static irqreturn_t static irqreturn_t
ioc_timer_interrupt(int irq, void *dev_id) ioc_timer_interrupt(int irq, void *dev_id)
{ {
write_seqlock(&xtime_lock);
timer_tick(); timer_tick();
write_sequnlock(&xtime_lock);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -49,8 +49,6 @@ static irqreturn_t at91sam926x_timer_interrupt(int irq, void *dev_id) ...@@ -49,8 +49,6 @@ static irqreturn_t at91sam926x_timer_interrupt(int irq, void *dev_id)
volatile long nr_ticks; volatile long nr_ticks;
if (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS) { /* This is a shared interrupt */ if (at91_sys_read(AT91_PIT_SR) & AT91_PIT_PITS) { /* This is a shared interrupt */
write_seqlock(&xtime_lock);
/* Get number to ticks performed before interrupt and clear PIT interrupt */ /* Get number to ticks performed before interrupt and clear PIT interrupt */
nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR)); nr_ticks = PIT_PICNT(at91_sys_read(AT91_PIT_PIVR));
do { do {
...@@ -58,7 +56,6 @@ static irqreturn_t at91sam926x_timer_interrupt(int irq, void *dev_id) ...@@ -58,7 +56,6 @@ static irqreturn_t at91sam926x_timer_interrupt(int irq, void *dev_id)
nr_ticks--; nr_ticks--;
} while (nr_ticks); } while (nr_ticks);
write_sequnlock(&xtime_lock);
return IRQ_HANDLED; return IRQ_HANDLED;
} else } else
return IRQ_NONE; /* not handled */ return IRQ_NONE; /* not handled */
......
...@@ -57,8 +57,6 @@ unsigned long iop_gettimeoffset(void) ...@@ -57,8 +57,6 @@ unsigned long iop_gettimeoffset(void)
static irqreturn_t static irqreturn_t
iop_timer_interrupt(int irq, void *dev_id) iop_timer_interrupt(int irq, void *dev_id)
{ {
write_seqlock(&xtime_lock);
write_tisr(1); write_tisr(1);
while ((signed long)(next_jiffy_time - read_tcr1()) while ((signed long)(next_jiffy_time - read_tcr1())
...@@ -67,8 +65,6 @@ iop_timer_interrupt(int irq, void *dev_id) ...@@ -67,8 +65,6 @@ iop_timer_interrupt(int irq, void *dev_id)
next_jiffy_time -= ticks_per_jiffy; next_jiffy_time -= ticks_per_jiffy;
} }
write_sequnlock(&xtime_lock);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
...@@ -130,9 +130,7 @@ static unsigned long s3c2410_gettimeoffset (void) ...@@ -130,9 +130,7 @@ static unsigned long s3c2410_gettimeoffset (void)
static irqreturn_t static irqreturn_t
s3c2410_timer_interrupt(int irq, void *dev_id) s3c2410_timer_interrupt(int irq, void *dev_id)
{ {
write_seqlock(&xtime_lock);
timer_tick(); timer_tick();
write_sequnlock(&xtime_lock);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册