From: Puranjay Mohan <puranjay@kernel.org>
To: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
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 10/12] rcu_txn: Test a commit from atomic context
Date: Fri, 23 Oct 2026 11:22:16 -0700 [thread overview]
Message-ID: <20261023182218.479327-7-puranjay@kernel.org> (raw)
In-Reply-To: <20261016133319.433617-11-mathieu.desnoyers@efficios.com>
On Fri, Oct 16, 2026 at 09:33:17AM -0400, Mathieu Desnoyers wrote:
[...]
> The test is only meaningful on a PREEMPT_RT kernel with lockdep,
> PROVE_RAW_LOCK_NESTING and DEBUG_ATOMIC_SLEEP. It passes there, and
> fails as expected when a spinlock_t is taken under the bit spinlock.
>
> The last two cases release a descriptor that installed no proxy, which
> has to be kfree_rcu() on PREEMPT_RT. They would pass with a kfree() as
> well: a kfree() under a bit spinlock on PREEMPT_RT was reported by
> neither lockdep nor the might_sleep() checks when tried.
This matters on !PREEMPT_RT too: there, a one-record commit or a cancel
under a raw spinlock calls kfree(), which lockdep can flag (see my reply
to patch 1). The test can't catch that as written.
[...]
> + /* One record. */
> + rcu_txn_init(&txn, GFP_KERNEL);
> + KUNIT_ASSERT_TRUE(test, rcu_txn_reserve(&txn, 2));
> + hlist_bl_lock(&bucket);
> + rcu_txn_record(&txn, &s1, T(20), T(40), TAG);
> + err = rcu_txn_commit(&txn);
> + hlist_bl_unlock(&bucket);
On !PREEMPT_RT, this case and the cancel after it are the two that reach
kfree(), and they only run under the bit spinlock, which lockdep doesn't
track. The raw spinlock case only commits two records, which go through
kfree_rcu(). Even under a raw spinlock, a single call rarely trips it,
because lockdep only sees barn->lock once the per-CPU sheaf is full.
Running the one-record and cancel cases under raw_spin_lock_irqsave() in
a loop would catch it. That is probably also why the kfree() you tried
on PREEMPT_RT went unreported, though I haven't checked RT.
[...]
> +/* Did the kernel report something since @tainted and @locks were sampled? */
> +static void expect_no_report(struct kunit *test, bool tainted, int locks)
> +{
> + KUNIT_EXPECT_EQ(test, test_taint(TAINT_WARN), tainted);
> + KUNIT_EXPECT_EQ(test, debug_locks, locks);
> +}
These compare against the state at the start of the test, so if
lockdep is already off, or TAINT_WARN already set, the matching check
can't fail. I ran into that: once one of my raw-spinlock cases
splatted, the two bulk cases after it passed even though each splats
when run alone. A kunit_skip() when PROVE_RAW_LOCK_NESTING is off, or
debug_locks is already 0, or TAINT_WARN is already set, would make that
visible.
Thanks,
Puranjay
next prev parent reply other threads:[~2026-10-23 18:22 UTC|newest]
Thread overview: 24+ 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-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-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-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-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-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-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 [this message]
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-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
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=20261023182218.479327-7-puranjay@kernel.org \
--to=puranjay@kernel.org \
--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=mathieu.desnoyers@efficios.com \
--cc=mingo@kernel.org \
--cc=neeraj.upadhyay@kernel.org \
--cc=paulmck@kernel.org \
--cc=peterz@infradead.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®