linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/13] srcu: Round out atomic SRCU support
@ 2026-09-07  7:58 Kunwu Chan
  2026-09-07  7:58 ` [PATCH 01/13] litmus: Add SRCU fastpath anchor-before-scan test Kunwu Chan
                   ` (13 more replies)
  0 siblings, 14 replies; 52+ messages in thread
From: Kunwu Chan @ 2026-09-07  7:58 UTC (permalink / raw)
  To: paulmck, jiangshanlai, josh
  Cc: rostedt, mathieu.desnoyers, rcu, linux-kernel, Kunwu Chan

From: Kunwu Chan <kunwu.chan@gmail.com>

This series rounds out atomic SRCU support with a reader-free fastpath,
some atomic-context fixes, and additional test coverage.

The core change is a reader-free fastpath for synchronize_srcu_atomic().
Atomic SRCU's read-side critical sections disable preemption, so when
the summed lock and unlock counts match for both ranks,
synchronize_srcu_atomic() can end the grace period immediately, without
the index flip or the srcu_advance_state() scans.  Correctness depends
on the grace-period anchor written by srcu_gp_start() preceding the
lock-count scan; two LKMM litmus tests (patches 1-2) verify that
ordering.

The series is:

 1-2  LKMM litmus tests for the reader-free fastpath ordering.
   3  srcutree: add the reader-free fastpath.
   4  rcutorture: add --do-atomic-srcu to torture.sh.
 5-7  srcutree: honor and propagate is_atomic so atomic SRCU never
      transitions to big.
   8  srcutree: forbid srcu_expedite_current() on atomic SRCU.
   9  rcutorture: disable srcu_expedite_current() for atomic SRCU.
  10  srcutree: skip callback scheduling for atomic SRCU grace periods.
  11  srcutree: drop the srcu_barrier() sleep for atomic SRCU.
  12  srcutree: remove leftover debug pr_alert()s.
  13  srcu: restrict the non_block annotation to task context, fixing a
      KCSAN data race.

The KCSAN race in patch 13 is a data race on the interrupted task's
->non_block_count when a timer callback runs atomic-SRCU readers in
inline softirq context.

Tested with herd7 7.58 (litmus tests), torture.sh --do-atomic-srcu, and
torture.sh --do-atomic-srcu --do-kcsan (KCSAN+PROVE_LOCKING).

Kunwu Chan (13):
  litmus: Add SRCU fastpath anchor-before-scan test
  litmus: Add SRCU fastpath scan-before-anchor test
  srcutree: Add reader-free fastpath to synchronize_srcu_atomic()
  rcutorture: Add atomic-SRCU support to torture.sh
  srcutree: Honor is_atomic in check_init_srcu_struct()
  srcutree: Make init_srcu_struct_atomic() prevent transition to big
  srcutree: Don't transition atomic SRCU to big in srcu_gp_end()
  srcutree: Forbid srcu_expedite_current() on atomic SRCU
  rcutorture: Disable srcu_expedite_current() for atomic SRCU
  srcutree: Skip callback scheduling for atomic SRCU grace periods
  srcutree: Remove srcu_barrier() sleep for atomic SRCU
  srcutree: Remove debug pr_alert()s
  srcu: Restrict atomic-SRCU non_block annotation to task context

 include/linux/srcu.h                          | 10 +-
 kernel/rcu/rcutorture.c                       |  1 +
 kernel/rcu/srcutree.c                         | 95 ++++++++++++++-----
 tools/memory-model/litmus-tests/README        | 16 ++++
 .../SRCU-fastpath-anchor-before-scan.litmus   | 56 +++++++++++
 .../SRCU-fastpath-scan-before-anchor.litmus   | 53 +++++++++++
 .../selftests/rcutorture/bin/torture.sh       | 24 +++++
 7 files changed, 229 insertions(+), 26 deletions(-)
 create mode 100644 tools/memory-model/litmus-tests/SRCU-fastpath-anchor-before-scan.litmus
 create mode 100644 tools/memory-model/litmus-tests/SRCU-fastpath-scan-before-anchor.litmus


base-commit: ef15070f96c5f07de3a9b593c36f6e83bc9e3d58
-- 
2.43.0


^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2026-09-11 16:17 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-07  7:58 [PATCH 00/13] srcu: Round out atomic SRCU support Kunwu Chan
2026-09-07  7:58 ` [PATCH 01/13] litmus: Add SRCU fastpath anchor-before-scan test Kunwu Chan
2026-09-08 23:58   ` Paul E. McKenney
2026-09-09  3:02     ` Kunwu Chan
2026-09-11 15:51       ` Paul E. McKenney
2026-09-11 16:17         ` KunWu Chan
2026-09-07  7:58 ` [PATCH 02/13] litmus: Add SRCU fastpath scan-before-anchor test Kunwu Chan
2026-09-07  7:58 ` [PATCH 03/13] srcutree: Add reader-free fastpath to synchronize_srcu_atomic() Kunwu Chan
2026-09-08 20:29   ` Paul E. McKenney
2026-09-08 21:13     ` David Woodhouse
2026-09-08 21:54       ` Paul E. McKenney
2026-09-08 22:09         ` David Woodhouse
2026-09-08 22:55           ` Paul E. McKenney
2026-09-08 22:26     ` David Woodhouse
2026-09-08 22:53       ` Paul E. McKenney
2026-09-08 22:56         ` David Woodhouse
2026-09-08 23:34           ` Paul E. McKenney
2026-09-09  3:35       ` Kunwu Chan
2026-09-07  7:58 ` [PATCH 04/13] rcutorture: Add atomic-SRCU support to torture.sh Kunwu Chan
2026-09-08 23:34   ` Paul E. McKenney
2026-09-09 22:35     ` Paul E. McKenney
2026-09-10  1:30       ` KunWu Chan
2026-09-10  3:47         ` Paul E. McKenney
2026-09-10  4:31           ` KunWu Chan
2026-09-07  7:58 ` [PATCH 05/13] srcutree: Honor is_atomic in check_init_srcu_struct() Kunwu Chan
2026-09-08 20:27   ` Paul E. McKenney
2026-09-07  7:58 ` [PATCH 06/13] srcutree: Make init_srcu_struct_atomic() prevent transition to big Kunwu Chan
2026-09-08 23:36   ` Paul E. McKenney
2026-09-09  2:34     ` Kunwu Chan
2026-09-10  0:08       ` Paul E. McKenney
2026-09-07  7:58 ` [PATCH 07/13] srcutree: Don't transition atomic SRCU to big in srcu_gp_end() Kunwu Chan
2026-09-08 23:38   ` Paul E. McKenney
2026-09-09  2:45     ` Kunwu Chan
2026-09-10  0:13       ` Paul E. McKenney
2026-09-10  3:18         ` KunWu Chan
2026-09-10  3:46           ` Paul E. McKenney
2026-09-10  4:27             ` KunWu Chan
2026-09-07  7:58 ` [PATCH 08/13] srcutree: Forbid srcu_expedite_current() on atomic SRCU Kunwu Chan
2026-09-08 23:43   ` Paul E. McKenney
2026-09-07  7:58 ` [PATCH 09/13] rcutorture: Disable srcu_expedite_current() for " Kunwu Chan
2026-09-08 23:48   ` Paul E. McKenney
2026-09-07  7:58 ` [PATCH 10/13] srcutree: Skip callback scheduling for atomic SRCU grace periods Kunwu Chan
2026-09-09  0:01   ` Paul E. McKenney
2026-09-07  7:58 ` [PATCH 11/13] srcutree: Remove srcu_barrier() sleep for atomic SRCU Kunwu Chan
2026-09-09  0:05   ` Paul E. McKenney
2026-09-07  7:58 ` [PATCH 12/13] srcutree: Remove debug pr_alert()s Kunwu Chan
2026-09-09  0:06   ` Paul E. McKenney
2026-09-07  7:58 ` [PATCH 13/13] srcu: Restrict atomic-SRCU non_block annotation to task context Kunwu Chan
2026-09-09  0:11   ` Paul E. McKenney
2026-09-10 12:16 ` [PATCH 00/13] srcu: Round out atomic SRCU support Zqiang
2026-09-11  2:31   ` KunWu Chan
2026-09-11  9:49   ` KunWu Chan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).