Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 66a2c077 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Russell King
Browse files

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



move update_process_times() out from under xtime_lock.

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: default avatarRussell King <rmk+kernel@arm.linux.org.uk>
parent 2f65baff
Loading
Loading
Loading
Loading
+0 −2
Original line number Original line Diff line number Diff line
@@ -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;
}
}


+0 −3
Original line number Original line Diff line number Diff line
@@ -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)
			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 */
+0 −4
Original line number Original line Diff line number Diff line
@@ -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)
		next_jiffy_time -= ticks_per_jiffy;
		next_jiffy_time -= ticks_per_jiffy;
	}
	}


	write_sequnlock(&xtime_lock);

	return IRQ_HANDLED;
	return IRQ_HANDLED;
}
}


+0 −2
Original line number Original line Diff line number Diff line
@@ -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;
}
}