mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Puranjay Mohan <puranjay@kernel.org>
Cc: "Paul E . McKenney" <paulmck@kernel.org>,
	linux-kernel@vger.kernel.org, Boqun Feng <boqun@kernel.org>,
	Josh Triplett <josh@joshtriplett.org>,
	Frederic Weisbecker <frederic@kernel.org>,
	Neeraj Upadhyay <neeraj.upadhyay@kernel.org>,
	Joel Fernandes <joelagnelf@nvidia.com>,
	Uladzislau Rezki <urezki@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Lai Jiangshan <jiangshanlai@gmail.com>,
	Zqiang <qiang.zhang@linux.dev>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Matthew Wilcox <willy@infradead.org>,
	Christian Brauner <brauner@kernel.org>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	"Liam R . Howlett" <liam@infradead.org>,
	Lorenzo Stoakes <ljs@kernel.org>,
	Alice Ryhl <aliceryhl@google.com>,
	Andrew Ballance <andrewjballance@gmail.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Will Deacon <will@kernel.org>,
	Mark Rutland <mark.rutland@arm.com>,
	Ingo Molnar <mingo@kernel.org>, Thomas Gleixner <tglx@kernel.org>,
	rcu@vger.kernel.org
Subject: Re: [RFC PATCH 06/12] rcu_txn: Add a doubly-linked list coherent in both directions
Date: Tue, 10 Nov 2026 10:13:19 -0500	[thread overview]
Message-ID: <e414a246-3446-4419-971b-c0a430e53f21@efficios.com> (raw)
In-Reply-To: <20261023182218.479327-5-puranjay@kernel.org>

On 2026-10-23 14:22, Puranjay Mohan wrote:
[...]
> This overstates it a bit: a reader can read P->next == N and then, once
> an insertion of E between them commits, read N->prev == E.  The commit
> message puts it accurately ("never finds the new value of an edge and
> then the old value of the other"), so I'd use that wording here too.

Agreed. The next version will use the wording of the commit message in
the header.

Your points show two levels of coherence, and the header should name
both:

- Per-node coherence: a reader never finds the new value of an edge,
   then the old value of the other. Every operation of rcu_txn_list
   gives it.
- Per-walk coherence: a walk visits every node that is not moved
   exactly once, and ends at its own head. A move does not give it,
   as your examples show.

[...]
> That has a consequence for iterators, which should be documented: a
> reader standing on the moved node can skip or revisit nodes that never
> moved.

Agreed. The next version will document it on the iterators and on the
move forms.

So the next version will present two ways to move a node, and the
caller picks by what its readers need.

The move itself never fails, never sleeps, and never waits for a grace
period. Its descriptor goes back to the per-CPU pool through
call_rcu_hurry(). It keeps per-node coherence, which an RCU list cannot
give for a move: a delete then an add are two updates that readers
observe separately. The move fits:

- readers that take the first or last entry, or that reach a node
   through another index, then read its neighbours;
- walkers that tolerate a skipped or repeated node, like an LRU scan,
   when the node moves within the same list. A walker standing on a
   node moved to another list would never reach its own head;
- writers that cannot sleep, like a second chance under a spinlock;
- moves composed with other edits in one commit, through
   rcu_txn_list_move_after_prepare().

A writer whose readers need per-walk coherence can instead delete the
node, wait for a grace period, then add it back. A deleted node keeps
its next and prev, so a reader standing on it leaves in the old order.
The add comes after every reader that saw the node at its old place. So
a walk sees every other node exactly once, and the moved node at most
once. The cost is a writer that sleeps for a grace period, and a node
that readers do not find during that time.

With this sequence, your reader on A walks H -> A -> B -> C -> H. So
does your reader on C.

[...]
> Either document on every move form that the destination must be in
> the same list, or give readers a way to detect it, like hlist_nulls
> does.

The next version will document it on every move form, with the
reason. A move to another list can use the same sequence. A reader
standing on the node finishes its own list, and ends at its own head.

Thanks,

Mathieu


-- 
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com

  reply	other threads:[~2026-11-10 15:13 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-10-16 13:33 [RFC PATCH 00/12] RCU pseudo-transactions Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 01/12] rcu_txn: Add single-writer " Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:11     ` Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 02/12] rcu_txn: Add KUnit tests Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 03/12] rcu_txn: Skip the record lookup with a Bloom filter Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:12     ` Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 04/12] rcu_txn: Add CONFIG_DEBUG_RCU_TXN Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:12     ` Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 05/12] rcu_txn: Add an hlist edited through transactions Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:12     ` Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 06/12] rcu_txn: Add a doubly-linked list coherent in both directions Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:13     ` Mathieu Desnoyers [this message]
2026-10-16 13:33 ` [RFC PATCH 07/12] Documentation/RCU: Describe RCU pseudo-transactions Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 08/12] Documentation/litmus-tests: Add RCU pseudo-transaction tests Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 09/12] rcu_txn: Test a list writer against concurrent readers Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:13     ` Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 10/12] rcu_txn: Test a commit from atomic context Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:14     ` Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 11/12] samples: Add a cache on RCU pseudo-transactions under one mutex Mathieu Desnoyers
2026-10-16 13:33 ` [RFC PATCH 12/12] samples: Add a cache on RCU pseudo-transactions with a lock per node Mathieu Desnoyers
2026-10-23 18:22   ` Puranjay Mohan
2026-11-10 15:14     ` Mathieu Desnoyers
2026-10-19  0:55 ` [RFC PATCH 00/12] RCU pseudo-transactions Joel Fernandes
2026-10-23 13:37   ` Mathieu Desnoyers
2026-10-23 18:19 ` Puranjay Mohan
2026-10-27 19:57   ` Mathieu Desnoyers
2026-10-28  1:13     ` Mathieu Desnoyers
2026-11-10  0:25       ` Paul E. McKenney
2026-11-10  1:00         ` Mathieu Desnoyers
2026-11-10  1:34           ` Paul E. McKenney
2026-11-10 15:26             ` Mathieu Desnoyers
2026-11-10 15:11   ` Mathieu Desnoyers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=e414a246-3446-4419-971b-c0a430e53f21@efficios.com \
    --to=mathieu.desnoyers@efficios.com \
    --cc=aliceryhl@google.com \
    --cc=andrewjballance@gmail.com \
    --cc=boqun@kernel.org \
    --cc=brauner@kernel.org \
    --cc=frederic@kernel.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=jiangshanlai@gmail.com \
    --cc=joelagnelf@nvidia.com \
    --cc=josh@joshtriplett.org \
    --cc=liam@infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ljs@kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=mingo@kernel.org \
    --cc=neeraj.upadhyay@kernel.org \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=puranjay@kernel.org \
    --cc=qiang.zhang@linux.dev \
    --cc=rcu@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=tglx@kernel.org \
    --cc=torvalds@linux-foundation.org \
    --cc=urezki@gmail.com \
    --cc=will@kernel.org \
    --cc=willy@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®