| From ceb0913fc2989baf97cf7a292ad3b2d511b7db37 Mon Sep 17 00:00:00 2001 |
| From: Thomas Gleixner <tglx@linutronix.de> |
| Date: Thu, 15 Dec 2016 12:01:05 +0100 |
| Subject: [PATCH] clocksource/dummy_timer: Move hotplug callback after the real |
| timers |
| |
| commit 9bf11ecce5a2758e5a097c2f3a13d08552d0d6f9 upstream. |
| |
| When the dummy timer callback is invoked before the real timer callbacks, |
| then it tries to install that timer for the starting CPU. If the platform |
| does not have a broadcast timer installed the installation fails with a |
| kernel crash. The crash happens due to a unconditional deference of the non |
| available broadcast device. This needs to be fixed in the timer core code. |
| |
| But even when this is fixed in the core code then installing the dummy |
| timer before the real timers is a pointless exercise. |
| |
| Move it to the end of the callback list. |
| |
| Fixes: 00c1d17aab51 ("clocksource/dummy_timer: Convert to hotplug state machine") |
| Reported-and-tested-by: Mason <slash.tmp@free.fr> |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Mark Rutland <mark.rutland@arm.com> |
| Cc: Anna-Maria Gleixner <anna-maria@linutronix.de> |
| Cc: Richard Cochran <rcochran@linutronix.de> |
| Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| Cc: Daniel Lezcano <daniel.lezcano@linaro.org> |
| Cc: Peter Zijlstra <peterz@infradead.org>, |
| Cc: Sebastian Frias <sf84@laposte.net> |
| Cc: Thibaud Cornic <thibaud_cornic@sigmadesigns.com> |
| Cc: Robin Murphy <robin.murphy@arm.com> |
| Link: http://lkml.kernel.org/r/1147ef90-7877-e4d2-bb2b-5c4fa8d3144b@free.fr |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h |
| index 34bd80512a0c..1052ce4ad52e 100644 |
| --- a/include/linux/cpuhotplug.h |
| +++ b/include/linux/cpuhotplug.h |
| @@ -51,7 +51,6 @@ enum cpuhp_state { |
| CPUHP_AP_ARM_L2X0_STARTING, |
| CPUHP_AP_ARM_ARCH_TIMER_STARTING, |
| CPUHP_AP_ARM_GLOBAL_TIMER_STARTING, |
| - CPUHP_AP_DUMMY_TIMER_STARTING, |
| CPUHP_AP_EXYNOS4_MCT_TIMER_STARTING, |
| CPUHP_AP_ARM_TWD_STARTING, |
| CPUHP_AP_METAG_TIMER_STARTING, |
| @@ -64,6 +63,8 @@ enum cpuhp_state { |
| CPUHP_AP_KVM_ARM_VGIC_INIT_STARTING, |
| CPUHP_AP_KVM_ARM_VGIC_STARTING, |
| CPUHP_AP_KVM_ARM_TIMER_STARTING, |
| + /* Must be the last timer callback */ |
| + CPUHP_AP_DUMMY_TIMER_STARTING, |
| CPUHP_AP_ARM_XEN_STARTING, |
| CPUHP_AP_ARM_CORESIGHT_STARTING, |
| CPUHP_AP_ARM_CORESIGHT4_STARTING, |
| -- |
| 2.10.1 |
| |