On Mon, May 05, 2025 at 03:44:43PM -0700, Paul E. McKenney wrote:
> On Mon, May 05, 2025 at 12:03:10PM -0700, Paul E. McKenney wrote:
> > Hello!
> >
> > Following up on off-list discussions and requests for more information.
> >
> > These reproduce reasonably easily, and here is an example:
> >
> > ------------------------------------------------------------------------
> > [ 426.022056] rcu: NOCB: Cannot CB-offload online CPU 25
> > [ 460.867350] rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
> > [ 460.867980] rcu: 0-...!: (1 GPs behind)
> > idle=8fe4/1/0x4000000000000000 softirq=2124/2125 fqs=0
> > [ 460.868726] rcu: 1-...!: (1 GPs behind)
> > idle=e0ac/1/0x4000000000000000 softirq=3547/3547 fqs=0
>
> Early returns suggest that the following patch suppresses this issue.
> My guess is that the changes to TREE01 suffice, but I will try later
> excluding the TREE01.boot changes. Architecture-dependent rcutorture
> scenario files, anyone? :-/
Seven of nine runs failed without the patch below, and all of 63 passed
with the patch. With only the Kconfig-option portion of the patch,
all of nine passed.
One option is the architecture-dependent rcutorture scenario files
mentioned above. Another is to remove the CONFIG_MAXSMP=y and
CONFIG_CPUMASK_OFFSTACK=y from TREE01, but then add them to a new
architecture-dependent option in torture.sh.
Other options?
Thanx, Paul
> ------------------------------------------------------------------------
>
> diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE01
> b/tools/testing/selftests/rcutorture/configs/rcu/TREE01
> index 8ae41d5f81a3..6281dbdc189f 100644
> --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE01
> +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE01
> @@ -8,8 +8,9 @@ CONFIG_NO_HZ_IDLE=y
> CONFIG_NO_HZ_FULL=n
> CONFIG_RCU_TRACE=y
> CONFIG_HOTPLUG_CPU=y
> -CONFIG_MAXSMP=y
> -CONFIG_CPUMASK_OFFSTACK=y
> +#CONFIG_MAXSMP=y
> +CONFIG_NR_CPUS=8
> +#CONFIG_CPUMASK_OFFSTACK=y
> CONFIG_RCU_NOCB_CPU=y
> CONFIG_DEBUG_LOCK_ALLOC=n
> CONFIG_RCU_BOOST=n
> diff --git a/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot
> b/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot
> index 40af3df0f397..45e3b33f12a3 100644
> --- a/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot
> +++ b/tools/testing/selftests/rcutorture/configs/rcu/TREE01.boot
> @@ -1,4 +1,4 @@
> -maxcpus=8 nr_cpus=43
> +maxcpus=8 nr_cpus=8
> rcutree.gp_preinit_delay=3
> rcutree.gp_init_delay=3
> rcutree.gp_cleanup_delay=3