Patch "timers: Reinitialize per cpu bases on hotplug" has been added to the 4.9-stable tree
This is a note to let you know that I've just added the patch titled
timers: Reinitialize per cpu bases on hotplug
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
timers-reinitialize-per-cpu-bases-on-hotplug.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
26456f87aca7157c057de65c9414b37f1ab881d1Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <[email protected]>
Date: Wed, 27 Dec 2017 21:37:25 +0100
Subject: timers: Reinitialize per cpu bases on hotplug
From: Thomas Gleixner <[email protected]>
commit 26456f87aca7157c057de65c9414b37f1ab881d1 upstream.
The timer wheel bases are not (re)initialized on CPU hotplug. That leaves them with a potentially stale clk and next_expiry valuem, which can cause trouble then the CPU is plugged.
Add a prepare callback which forwards the clock, sets next_expiry to far in the future and reset the control flags to a known state.
Set base->must_forward_clk so the first timer which is queued will try to forward the clock to current jiffies.
--- include/linux/cpuhotplug.h | 2 +- include/linux/timer.h | 4 +++- kernel/cpu.c | 4 ++-- kernel/time/timer.c | 15 +++++++++++++++ 4 files changed, 21 insertions(+), 4 deletions(-)
include/linux/cpuhotplug.h +1 -1
@@ -48,7 +48,7 @@ enum cpuhp_state {CPUHP_ARM_SHMOBILE_SCU_PREPARE ,CPUHP_SH_SH3X_PREPARE ,CPUHP_BLK_MQ_PREPARE , -CPUHP_TIMERS_DEAD , +CPUHP_TIMERS_PREPARE ,CPUHP_NOTF_ERR_INJ_PREPARE ,CPUHP_MIPS_SOC_PREPARE , CPUHP_BRINGUP_CPU,
include/linux/timer.h +3 -1
@@ -274,9 +274,11 @@ unsigned long round_jiffies_up(unsignedunsigned long round_jiffies_up_relative (unsigned long j);#ifdef CONFIG_HOTPLUG_CPU +int timers_prepare_cpu (unsigned int cpu);int timers_dead_cpu (unsigned int cpu);#else -#define timers_dead_cpu NULL +#define timers_prepare_cpu NULL +#define timers_dead_cpu NULL#endif #endif
kernel/cpu.c +2 -2
@@ -1309,9 +1309,9 @@ static struct cpuhp_step cpuhp_bp_states* before blk_mq_queue_reinit_notify() from notify_dead(), * otherwise a RCU stall occurs. */ - [CPUHP_TIMERS_DEAD] = { + [CPUHP_TIMERS_PREPARE] = { .name = "timers:dead", - .startup.single = NULL, + .startup.single = timers_prepare_cpu, .teardown.single = timers_dead_cpu, },/* Kicks the plugged cpu into life */
kernel/time/timer.c +15 -0
@@ -1851,6 +1851,21 @@ static void migrate_timer_list(struct ti } } +int timers_prepare_cpu (unsigned int cpu) +{ +struct timer_base *base; +int b; + +for (b =0 ; b <NR_BASES ; b++) { + base =per_cpu_ptr (&timer_bases[b], cpu); + base->clk = jiffies; + base->next_expiry = base->clk +NEXT_TIMER_MAX_DELTA ; + base->is_idle = false; + base->must_forward_clk = true; + } +return 0 ; +} +int timers_dead_cpu (unsigned int cpu) {struct timer_base *old_base;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/nohz-prevent-a-timer-interrupt-storm-in-tick_nohz_stop_sched_tick.patch queue-4.9/timers-invoke-timer_start_debug-where-it-makes-sense.patch queue-4.9/x86-vm86-32-switch-to-flush_tlb_mm_range-in-mark_screen_rdonly.patch queue-4.9/x86-mm-add-the-nopcid-boot-option-to-turn-off-pcid.patch queue-4.9/x86-mm-enable-cr4.pcide-on-supported-systems.patch queue-4.9/sync-objtool-s-copy-of-x86-opcode-map.txt.patch queue-4.9/x86-smpboot-remove-stale-tlb-flush-invocations.patch queue-4.9/timers-use-deferrable-base-independent-of-base-nohz_active.patch queue-4.9/x86-mm-remove-the-up-asm-tlbflush.h-code-always-use-the-formerly-smp-code.patch queue-4.9/x86-mm-reimplement-flush_tlb_page-using-flush_tlb_mm_range.patch queue-4.9/x86-mm-make-flush_tlb_mm_range-more-predictable.patch queue-4.9/x86-mm-remove-flush_tlb-and-flush_tlb_current_task.patch queue-4.9/x86-mm-disable-pcid-on-32-bit-kernels.patch queue-4.9/timers-reinitialize-per-cpu-bases-on-hotplug.patch queue-4.9/x86-mm-64-fix-reboot-interaction-with-cr4.pcide.patch