tick: Remove outgoing CPU from broadcast masks
authorThomas Gleixner <tglx@linutronix.de>
Thu, 21 Mar 2019 15:39:20 +0000 (16:39 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 23 Mar 2019 17:26:43 +0000 (18:26 +0100)
commit1b72d43237980eab9b6ae6bb8181e51c840377e6
treec515d7d02bda7e60dba5babdd36d97b650c66ec6
parente1e41b6ce5f9c1a80bf4f2404ec5ab11c6c5a2ad
tick: Remove outgoing CPU from broadcast masks

Valentin reported that unplugging a CPU occasionally results in a warning
in the tick broadcast code which is triggered when an offline CPU is in the
broadcast mask.

This happens because the outgoing CPU is not removing itself from the
broadcast masks, especially not from the broadcast_force_mask. The removal
happens on the control CPU after the outgoing CPU is dead. It's a long
standing issue, but the warning is harmless.

Rework the hotplug mechanism so that the outgoing CPU removes itself from
the broadcast masks after disabling interrupts and removing itself from the
online mask.

Reported-by: Valentin Schneider <valentin.schneider@arm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Valentin Schneider <valentin.schneider@arm.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Link: https://lkml.kernel.org/r/alpine.DEB.2.21.1903211540180.1784@nanos.tec.linutronix.de
include/linux/tick.h
kernel/cpu.c
kernel/time/clockevents.c
kernel/time/tick-broadcast.c
kernel/time/tick-internal.h