Commit d2cf0854 authored by Frederic Weisbecker's avatar Frederic Weisbecker Committed by Paul E. McKenney
Browse files

rcu/nocb: Allow empty "rcu_nocbs" kernel parameter



Allow the rcu_nocbs kernel parameter to be specified just by itself,
without specifying any CPUs.  This allows systems administrators to use
"rcu_nocbs" to specify that none of the CPUs are to be offloaded at boot
time, but than any of them may be offloaded at runtime via cpusets.

In contrast, if the "rcu_nocbs" or "nohz_full" kernel parameters are not
specified at all, then not only are none of the CPUs offloaded at boot,
none of them can be offloaded at runtime, either.

While in the area, modernize the description of the "rcuo" kthreads'
naming scheme.

Reviewed-by: default avatarNeeraj Upadhyay <quic_neeraju@quicinc.com>
Signed-off-by: default avatarFrederic Weisbecker <frederic@kernel.org>
Cc: Boqun Feng <boqun.feng@gmail.com>
Cc: Uladzislau Rezki <urezki@gmail.com>
Cc: Josh Triplett <josh@joshtriplett.org>
Cc: Joel Fernandes <joel@joelfernandes.org>
Tested-by: default avatarJuri Lelli <juri.lelli@redhat.com>
Signed-off-by: default avatarPaul E. McKenney <paulmck@kernel.org>
parent 2cf4528d
Loading
Loading
Loading
Loading
+24 −13
Original line number Diff line number Diff line
@@ -4343,19 +4343,30 @@
				Disable the Correctable Errors Collector,
				see CONFIG_RAS_CEC help text.

	rcu_nocbs=	[KNL]
			The argument is a cpu list, as described above.

			In kernels built with CONFIG_RCU_NOCB_CPU=y, set
			the specified list of CPUs to be no-callback CPUs.
			Invocation of these CPUs' RCU callbacks will be
			offloaded to "rcuox/N" kthreads created for that
			purpose, where "x" is "p" for RCU-preempt, and
			"s" for RCU-sched, and "N" is the CPU number.
			This reduces OS jitter on the offloaded CPUs,
			which can be useful for HPC and real-time
			workloads.  It can also improve energy efficiency
			for asymmetric multiprocessors.
	rcu_nocbs[=cpu-list]
			[KNL] The optional argument is a cpu list,
			as described above.

			In kernels built with CONFIG_RCU_NOCB_CPU=y,
			enable the no-callback CPU mode, which prevents
			such CPUs' callbacks from being invoked in
			softirq context.  Invocation of such CPUs' RCU
			callbacks will instead be offloaded to "rcuox/N"
			kthreads created for that purpose, where "x" is
			"p" for RCU-preempt, "s" for RCU-sched, and "g"
			for the kthreads that mediate grace periods; and
			"N" is the CPU number. This reduces OS jitter on
			the offloaded CPUs, which can be useful for HPC
			and real-time workloads.  It can also improve
			energy efficiency for asymmetric multiprocessors.

			If a cpulist is passed as an argument, the specified
			list of	CPUs is set to no-callback mode from boot.

			Otherwise, if the '=' sign and the cpulist
			arguments are omitted, no CPU will be set to
			no-callback mode from boot but the mode may be
			toggled at runtime via cpusets.

	rcu_nocb_poll	[KNL]
			Rather than requiring that offloaded CPUs
+6 −4
Original line number Diff line number Diff line
@@ -66,14 +66,16 @@ static bool rcu_nocb_is_setup;
static int __init rcu_nocb_setup(char *str)
{
	alloc_bootmem_cpumask_var(&rcu_nocb_mask);
	if (cpulist_parse(str, rcu_nocb_mask)) {
	if (*str == '=') {
		if (cpulist_parse(++str, rcu_nocb_mask)) {
			pr_warn("rcu_nocbs= bad CPU range, all CPUs set\n");
			cpumask_setall(rcu_nocb_mask);
		}
	}
	rcu_nocb_is_setup = true;
	return 1;
}
__setup("rcu_nocbs=", rcu_nocb_setup);
__setup("rcu_nocbs", rcu_nocb_setup);

static int __init parse_rcu_nocb_poll(char *arg)
{