Re: [PATCH v2] rcuscale: add srcua scale type
From: Bradley Morgan
Date: Sat Oct 03 2026 - 19:52:57 EST
On 4 October 2026 00:43:48 BST, "Paul E. McKenney" <paulmck@xxxxxxxxxx>
wrote:
>On Sat, Oct 03, 2026 at 06:52:44PM +0100, Bradley Morgan wrote:
>> On 3 October 2026 17:17:19 BST, Kunwu Chan <kunwu.chan@xxxxxxxxx> wrote:
>> >Add support for scaling atomic SRCU grace periods using
>> >srcu_read_lock_atomic()/srcu_read_unlock_atomic() and
>> >synchronize_srcu_atomic().
>> >
>> >Suggested-by: Paul E. McKenney <paulmck@xxxxxxxxxx>
>> >Signed-off-by: Kunwu Chan <kunwu.chan@xxxxxxxxx>
>>
>> 1: why didn't u cc me
>> 2: why did you ommit my tag? I tend to review based on correctness, cuz
>idk pauls preferences, once I do I'll be a better rcu reviewer.
>
>Take it easy, Bradley.
>
>Many in the Linux kernel community consider it polite to drop a tag
>from (or, as in this case, avoid adding a tag to) a patch that changed
>significantly. On the CC issue, you did find the patch the first time
>without him CCing you. ;-)
>
>Kunwu did nothing wrong here.
I'm annoyed but not mad, no grudges taken..
>
> Thanx, Paul
>
>> >---
>> >Changes since v1:
>> >- Rename srcu_atomic_ctlp to srcua and reuse srcu_ctlp for
>> > SRCU operations, as suggested by Paul.
>> >- Reuse the existing SRCU cleanup and completed helpers by
>> > initializing srcu_ctlp in srcu_atomic_scale_init().
>> >- Add .stats using srcu_scale_stats().
>> >- Use "srcua" to match the existing "srcu" and "srcud" scale
>> > type names.
>> >- Use synchronize_srcu_atomic() for both normal and expedited
>> > scale tests.
>> >
>> >v1:
>https://lore.kernel.org/all/20260927100359.3903688-1-kunwu.chan@xxxxxxxxx/
>> >Tested with kvm.sh --torture rcuscale scale_type=srcua on x86_64 and
>> >arm64, alongside gp_exp=1 and PROVE_LOCKING=y: no warnings or lockdep
>> >splats.
>> >---
>> > kernel/rcu/rcuscale.c | 41 ++++++++++++++++++++++++++++++++++++++++-
>> > 1 file changed, 40 insertions(+), 1 deletion(-)
>> >
>> >diff --git a/kernel/rcu/rcuscale.c b/kernel/rcu/rcuscale.c
>> >index 1097ec15879c..b172882824ac 100644
>> >--- a/kernel/rcu/rcuscale.c
>> >+++ b/kernel/rcu/rcuscale.c
>> >@@ -293,6 +293,44 @@ static struct rcu_scale_ops srcud_ops = {
>> > .name = "srcud"
>> > };
>> >
>> >+static struct srcu_struct srcua;
>> >+
>> >+static int srcu_scale_atomic_read_lock(void)
>> >+{
>> >+ return srcu_read_lock_atomic(srcu_ctlp);
>> >+}
>> >+
>> >+static void srcu_scale_atomic_read_unlock(int idx)
>> >+{
>> >+ srcu_read_unlock_atomic(srcu_ctlp, idx);
>> >+}
>> >+
>> >+static void srcu_scale_atomic_synchronize(void)
>> >+{
>> >+ synchronize_srcu_atomic(srcu_ctlp);
>> >+}
>> >+
>> >+static void srcu_atomic_scale_init(void)
>> >+{
>> >+ srcu_ctlp = &srcua;
>> >+ init_srcu_struct_atomic(srcu_ctlp);
>> >+}
>> >+
>> >+static struct rcu_scale_ops srcua_ops = {
>> >+ .ptype = SRCU_FLAVOR,
>> >+ .init = srcu_atomic_scale_init,
>> >+ .cleanup = srcu_sync_scale_cleanup,
>> >+ .readlock = srcu_scale_atomic_read_lock,
>> >+ .readunlock = srcu_scale_atomic_read_unlock,
>> >+ .get_gp_seq = srcu_scale_completed,
>> >+ .gp_diff = rcu_seq_diff,
>> >+ .exp_completed = srcu_scale_completed,
>> >+ .sync = srcu_scale_atomic_synchronize,
>> >+ .exp_sync = srcu_scale_atomic_synchronize,
>> >+ .stats = srcu_scale_stats,
>> >+ .name = "srcua"
>> >+};
>> >+
>> > #ifdef CONFIG_TASKS_RCU
>> >
>> > /*
>> >@@ -1110,7 +1148,8 @@ rcu_scale_init(void)
>> > long i;
>> > long j;
>> > static struct rcu_scale_ops *scale_ops[] = {
>> >- &rcu_ops, &srcu_ops, &srcud_ops, TASKS_OPS TASKS_RUDE_OPS TASKS_TRACING_OPS
>> >+ &rcu_ops, &srcu_ops, &srcua_ops, &srcud_ops,
>> >+ TASKS_OPS TASKS_RUDE_OPS TASKS_TRACING_OPS
>> > };
>> >
>> > if (!torture_init_begin(scale_type, verbose))
>> >
>> >base-commit: d21906b0aa1e9573cdb5e7acaca44966b9d1dcd2
>> >
>>
>> --- Thanks!
>> "I'm not a very positive person" - Linus torvalds
--- Thanks!
"I'm not a very positive person" - Linus torvalds