aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/include/asm
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2011-11-23 20:07:17 +0000
committerGreg Kroah-Hartman <gregkh@suse.de>2012-01-12 11:35:02 -0800
commitbfaebb8af017d443937022cf3d5735d726e4f711 (patch)
tree8f88264306700916b41aa8b0521fbf6f57db6fae /arch/powerpc/include/asm
parenta7b8c32b67b60fe9e8b53bb86bb7a04631e6e262 (diff)
downloadkernel_samsung_smdk4412-bfaebb8af017d443937022cf3d5735d726e4f711.tar.gz
kernel_samsung_smdk4412-bfaebb8af017d443937022cf3d5735d726e4f711.tar.bz2
kernel_samsung_smdk4412-bfaebb8af017d443937022cf3d5735d726e4f711.zip
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>
Diffstat (limited to 'arch/powerpc/include/asm')
-rw-r--r--arch/powerpc/include/asm/time.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/time.h b/arch/powerpc/include/asm/time.h
index fe6f7c2c9c6..bc3c745cb90 100644
--- a/arch/powerpc/include/asm/time.h
+++ b/arch/powerpc/include/asm/time.h
@@ -219,5 +219,7 @@ DECLARE_PER_CPU(struct cpu_usage, cpu_usage_array);
extern void secondary_cpu_time_init(void);
extern void iSeries_time_init_early(void);
+extern void decrementer_check_overflow(void);
+
#endif /* __KERNEL__ */
#endif /* __POWERPC_TIME_H */