Re: And speaking of avoiding inconveniencing users...

From: Uladzislau Rezki
Date: Tue May 10 2022 - 16:46:48 EST


Hello, Paul.

Indeed the changed switched to 21 seconds. What is about just set the
60 000 for !ANDROID?

default 60000 if !ANDROID

On Mon, May 9, 2022 at 10:58 PM Paul E. McKenney <paulmck@xxxxxxxxxx> wrote:
>
> Hello, Uladzislau,
>
> And I wasn't paying attention when reviewing this patch:
>
> 084e1c049a8e ("rcu: Introduce CONFIG_RCU_EXP_CPU_STALL_TIMEOUT")
>
> Distros specifying 60 seconds for the stall timeout get hit with a silent
> change to 21 seconds for the expedited stall timeout.
>
> Unless you tell me otherwise, I will merge the following diff into the
> above commit. So please let me know if this will cause any problems.
>
> Thanx, Paul
>
> ------------------------------------------------------------------------
>
> diff --git a/Documentation/RCU/stallwarn.rst b/Documentation/RCU/stallwarn.rst
> index 1d863b04727c3..794837eb519b9 100644
> --- a/Documentation/RCU/stallwarn.rst
> +++ b/Documentation/RCU/stallwarn.rst
> @@ -166,10 +166,12 @@ CONFIG_RCU_EXP_CPU_STALL_TIMEOUT
> --------------------------------
>
> Same as the CONFIG_RCU_CPU_STALL_TIMEOUT parameter but only for
> - the expedited grace period. This parameter defines the period of
> - time that RCU will wait from the beginning of an expedited grace
> - period until it issues an RCU CPU stall warning. This time period
> - is normally 20 milliseconds on Android devices.
> + the expedited grace period. This parameter defines the period
> + of time that RCU will wait from the beginning of an expedited
> + grace period until it issues an RCU CPU stall warning. This time
> + period is normally 20 milliseconds on Android devices. A zero
> + value causes the CONFIG_RCU_CPU_STALL_TIMEOUT value to be used,
> + after conversion to milliseconds.
>
> This configuration parameter may be changed at runtime via the
> /sys/module/rcupdate/parameters/rcu_exp_cpu_stall_timeout, however
> diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
> index 34d44648f3f5d..ca9db809beda3 100644
> --- a/Documentation/admin-guide/kernel-parameters.txt
> +++ b/Documentation/admin-guide/kernel-parameters.txt
> @@ -4936,6 +4936,9 @@
> and the maximum allowed value is 21000
> milliseconds. Please note that this value is
> adjusted to an arch timer tick resolution.
> + Setting this to zero causes the value from
> + rcupdate.rcu_cpu_stall_timeout to be used (after
> + conversion from seconds to milliseconds).
>
> rcupdate.rcu_expedited= [KNL]
> Use expedited grace-period primitives, for
> diff --git a/kernel/rcu/Kconfig.debug b/kernel/rcu/Kconfig.debug
> index 39dd4b9d647f8..9b64e55d4f615 100644
> --- a/kernel/rcu/Kconfig.debug
> +++ b/kernel/rcu/Kconfig.debug
> @@ -85,15 +85,16 @@ config RCU_CPU_STALL_TIMEOUT
> config RCU_EXP_CPU_STALL_TIMEOUT
> int "Expedited RCU CPU stall timeout in milliseconds"
> depends on RCU_STALL_COMMON
> - range 1 21000
> + range 0 21000
> default 20 if ANDROID
> - default 21000 if !ANDROID
> -
> + default 0 if !ANDROID
> help
> If a given expedited RCU grace period extends more than the
> specified number of milliseconds, a CPU stall warning is printed.
> If the RCU grace period persists, additional CPU stall warnings
> - are printed at more widely spaced intervals.
> + are printed at more widely spaced intervals. A value of zero
> + says to use the RCU_CPU_STALL_TIMEOUT value converted from
> + seconds to milliseconds.
>
> config RCU_TRACE
> bool "Enable tracing for RCU"
> diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h
> index 0a25a4ea6eef8..2464b0eccfd02 100644
> --- a/kernel/rcu/tree_stall.h
> +++ b/kernel/rcu/tree_stall.h
> @@ -31,15 +31,17 @@ int rcu_exp_jiffies_till_stall_check(void)
> int exp_stall_delay_delta = 0;
> int till_stall_check;
>
> - /*
> - * Limit check must be consistent with the Kconfig limits for
> - * CONFIG_RCU_EXP_CPU_STALL_TIMEOUT, so check the allowed range.
> - * The minimum clamped value is "2UL", because at least one full
> - * tick has to be guaranteed.
> - */
> + // Zero says to use rcu_cpu_stall_timeout, but in milliseconds.
> + if (!cpu_stall_timeout)
> + cpu_stall_timeout = jiffies_to_msecs(rcu_jiffies_till_stall_check());
> +
> + // Limit check must be consistent with the Kconfig limits for
> + // CONFIG_RCU_EXP_CPU_STALL_TIMEOUT, so check the allowed range.
> + // The minimum clamped value is "2UL", because at least one full
> + // tick has to be guaranteed.
> till_stall_check = clamp(msecs_to_jiffies(cpu_stall_timeout), 2UL, 21UL * HZ);
>
> - if (jiffies_to_msecs(till_stall_check) != cpu_stall_timeout)
> + if (cpu_stall_timeout && jiffies_to_msecs(till_stall_check) != cpu_stall_timeout)
> WRITE_ONCE(rcu_exp_cpu_stall_timeout, jiffies_to_msecs(till_stall_check));
>
> #ifdef CONFIG_PROVE_RCU



--
Uladzislau Rezki