[PATCH v2] srcutree: Skip torture to-big transition for atomic SRCU

Kunwu Chan posted 1 patch 2 weeks ago
kernel/rcu/srcutree.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
[PATCH v2] srcutree: Skip torture to-big transition for atomic SRCU
Posted by Kunwu Chan 2 weeks ago
Atomic SRCU does not use the srcu_node combining tree. Exclude it
from the SRCU_SIZING_IS_TORTURE() transition in
srcu_torture_stats_print(), and warn if such a transition is requested.

Signed-off-by: Kunwu Chan <kunwu.chan@gmail.com>
---
Changes:
-add warn on an invalid atomic SRCU sizing configuration.
-v1: https://lore.kernel.org/rcu/20260910041427.3579817-1-kunwu.chan@gmail.com/
---
 kernel/rcu/srcutree.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
index 68441c32cebf..60c102a4d057 100644
--- a/kernel/rcu/srcutree.c
+++ b/kernel/rcu/srcutree.c
@@ -2422,8 +2422,10 @@ void srcu_torture_stats_print(struct srcu_struct *ssp, char *tt, char *tf)
 		}
 		pr_cont(" T(%ld,%ld)\n", s0, s1);
 	}
-	if (SRCU_SIZING_IS_TORTURE())
-		srcu_transition_to_big(ssp);
+	if (SRCU_SIZING_IS_TORTURE()) {
+		if (!WARN_ON_ONCE(ssp->srcu_reader_flavor == SRCU_READ_FLAVOR_ATOMIC))
+			srcu_transition_to_big(ssp);
+	}
 }
 EXPORT_SYMBOL_GPL(srcu_torture_stats_print);
 
-- 
2.43.0
Re: [PATCH v2] srcutree: Skip torture to-big transition for atomic SRCU
Posted by Paul E. McKenney 1 week, 6 days ago
On Fri, Sep 11, 2026 at 12:02:51PM +0800, Kunwu Chan wrote:
> Atomic SRCU does not use the srcu_node combining tree. Exclude it
> from the SRCU_SIZING_IS_TORTURE() transition in
> srcu_torture_stats_print(), and warn if such a transition is requested.
> 
> Signed-off-by: Kunwu Chan <kunwu.chan@gmail.com>

Queued for testing and review, thank you!

							Thanx, Paul

> ---
> Changes:
> -add warn on an invalid atomic SRCU sizing configuration.
> -v1: https://lore.kernel.org/rcu/20260910041427.3579817-1-kunwu.chan@gmail.com/
> ---
>  kernel/rcu/srcutree.c | 6 ++++--
>  1 file changed, 4 insertions(+), 2 deletions(-)
> 
> diff --git a/kernel/rcu/srcutree.c b/kernel/rcu/srcutree.c
> index 68441c32cebf..60c102a4d057 100644
> --- a/kernel/rcu/srcutree.c
> +++ b/kernel/rcu/srcutree.c
> @@ -2422,8 +2422,10 @@ void srcu_torture_stats_print(struct srcu_struct *ssp, char *tt, char *tf)
>  		}
>  		pr_cont(" T(%ld,%ld)\n", s0, s1);
>  	}
> -	if (SRCU_SIZING_IS_TORTURE())
> -		srcu_transition_to_big(ssp);
> +	if (SRCU_SIZING_IS_TORTURE()) {
> +		if (!WARN_ON_ONCE(ssp->srcu_reader_flavor == SRCU_READ_FLAVOR_ATOMIC))
> +			srcu_transition_to_big(ssp);
> +	}
>  }
>  EXPORT_SYMBOL_GPL(srcu_torture_stats_print);
>  
> -- 
> 2.43.0
>