nohz: Add TICK_DEP_BIT_RCU
authorFrederic Weisbecker <frederic@kernel.org>
Wed, 24 Jul 2019 13:22:59 +0000 (15:22 +0200)
committerPaul E. McKenney <paulmck@kernel.org>
Sat, 5 Oct 2019 17:45:16 +0000 (10:45 -0700)
commit01b4c39901e087ceebae2733857248de81476bd8
tree72bdea923f0fc822c57b1cc916c596d2bf6682b3
parent54ecb8f7028c5eb3d740bb82b0f1d90f2df63c5c
nohz: Add TICK_DEP_BIT_RCU

If a nohz_full CPU is looping in the kernel, the scheduling-clock tick
might nevertheless remain disabled.  In !PREEMPT kernels, this can
prevent RCU's attempts to enlist the aid of that CPU's executions of
cond_resched(), which can in turn result in an arbitrarily delayed grace
period and thus an OOM.  RCU therefore needs a way to enable a holdout
nohz_full CPU's scheduler-clock interrupt.

This commit therefore provides a new TICK_DEP_BIT_RCU value which RCU can
pass to tick_dep_set_cpu() and friends to force on the scheduler-clock
interrupt for a specified CPU or task.  In some cases, rcutorture needs
to turn on the scheduler-clock tick, so this commit also exports the
relevant symbols to GPL-licensed modules.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Paul E. McKenney <paulmck@kernel.org>
include/linux/tick.h
include/trace/events/timer.h
kernel/time/tick-sched.c