powerpc/time: Handle wrapping of decrementer
authorAnton Blanchard <anton@samba.org>
Wed, 23 Nov 2011 20:07:17 +0000 (20:07 +0000)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 12 Jan 2012 19:33:13 +0000 (11:33 -0800)
commit4df2f434528dae331fb357a0c6f104dd3067e5ed
tree48c92f256a209b512e7a8f687edabdff619a2555
parent390db354edfd1acdef2bae651e183d7a302723c4
powerpc/time: Handle wrapping of decrementer

commit 37fb9a0231ee43d42d069863bdfd567fca2b61af upstream.

When re-enabling interrupts we have code to handle edge sensitive
decrementers by resetting the decrementer to 1 whenever it is negative.
If interrupts were disabled long enough that the decrementer wrapped to
positive we do nothing. This means interrupts can be delayed for a long
time until it finally goes negative again.

While we hope interrupts are never be disabled long enough for the
decrementer to go positive, we have a very good test team that can
drive any kernel into the ground. The softlockup data we get back
from these fails could be seconds in the future, completely missing
the cause of the lockup.

We already keep track of the timebase of the next event so use that
to work out if we should trigger a decrementer exception.

Signed-off-by: Anton Blanchard <anton@samba.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
arch/powerpc/include/asm/time.h
arch/powerpc/kernel/irq.c
arch/powerpc/kernel/time.c