[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH RFC v4 11/13] rcutorture: Make Tasks RCU readers Tasks Trace readers where required
- To: "Paul E. McKenney" <paulmck@xxxxxxxxxx>, Frederic Weisbecker <frederic@xxxxxxxxxx>, Neeraj Upadhyay <neeraj.upadhyay@xxxxxxxxxx>, Joel Fernandes <joelagnelf@xxxxxxxxxx>, Boqun Feng <boqun@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Steven Rostedt <rostedt@xxxxxxxxxxx>, Masami Hiramatsu <mhiramat@xxxxxxxxxx>, Mark Rutland <mark.rutland@xxxxxxx>, Jiri Olsa <jolsa@xxxxxxxxxx>, Alexei Starovoitov <ast@xxxxxxxxxx>, Daniel Borkmann <daniel@xxxxxxxxxxxxx>, Andrii Nakryiko <andrii@xxxxxxxxxx>, x86@xxxxxxxxxx, Catalin Marinas <catalin.marinas@xxxxxxx>, Will Deacon <will@xxxxxxxxxx>, Puranjay Mohan <puranjay@xxxxxxxxxx>, Xu Kuohai <xukuohai@xxxxxxxxxxxxxxx>, "Paul E. McKenney" <paulmck@xxxxxxxxxx>, Frederic Weisbecker <frederic@xxxxxxxxxx>, Neeraj Upadhyay <neeraj.upadhyay@xxxxxxxxxx>, Joel Fernandes <joelagnelf@xxxxxxxxxx>, Boqun Feng <boqun@xxxxxxxxxx>, Thomas Gleixner <tglx@xxxxxxxxxx>, Peter Zijlstra <peterz@xxxxxxxxxxxxx>, Steven Rostedt <rostedt@xxxxxxxxxxx>, Masami Hiramatsu <mhiramat@xxxxxxxxxx>, Mark Rutland <mark.rutland@xxxxxxx>, Jiri Olsa <jolsa@xxxxxxxxxx>, Alexei Starovoitov <ast@xxxxxxxxxx>, Daniel Borkmann <daniel@xxxxxxxxxxxxx>, Andrii Nakryiko <andrii@xxxxxxxxxx>, x86@xxxxxxxxxx, Catalin Marinas <catalin.marinas@xxxxxxx>, Will Deacon <will@xxxxxxxxxx>, Puranjay Mohan <puranjay@xxxxxxxxxx>, Xu Kuohai <xukuohai@xxxxxxxxxxxxxxx>
- From: Josef Bacik <josef@xxxxxxxxxxxxxx>
- Date: Fri, 18 Sep 2026 14:49:30 +0000
- Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=google header.d=toxicpanda.com header.i="@toxicpanda.com" header.h="Cc:To:In-Reply-To:References:Message-Id:Content-Transfer-Encoding:Content-Type:MIME-Version:Subject:Date:From"
- Cc: Andy Lutomirski <luto@xxxxxxxxxx>, Josh Triplett <josh@xxxxxxxxxxxxxxxx>, Uladzislau Rezki <urezki@xxxxxxxxx>, Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>, Lai Jiangshan <jiangshanlai@xxxxxxxxx>, Zqiang <qiang.zhang@xxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Luis Chamberlain <mcgrof@xxxxxxxxxx>, Ihor Solodrai <ihor.solodrai@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, rcu@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx, bpf@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx, Andy Lutomirski <luto@xxxxxxxxxx>, Josh Triplett <josh@xxxxxxxxxxxxxxxx>, Uladzislau Rezki <urezki@xxxxxxxxx>, Mathieu Desnoyers <mathieu.desnoyers@xxxxxxxxxxxx>, Lai Jiangshan <jiangshanlai@xxxxxxxxx>, Zqiang <qiang.zhang@xxxxxxxxx>, Juergen Gross <jgross@xxxxxxxx>, Luis Chamberlain <mcgrof@xxxxxxxxxx>, Ihor Solodrai <ihor.solodrai@xxxxxxxxx>, linux-kernel@xxxxxxxxxxxxxxx, rcu@xxxxxxxxxxxxxxx, linux-trace-kernel@xxxxxxxxxxxxxxx, bpf@xxxxxxxxxxxxxxx, linux-arm-kernel@xxxxxxxxxxxxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxxx, Josef Bacik <josef@xxxxxxxxxxxxxx>
- Delivery-date: Fri, 18 Sep 2026 14:50:09 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
rcutorture's "tasks" flavor has empty readlock/readunlock hooks because
a classic Tasks RCU reader is simply code that does not block. Under
CONFIG_TASKS_RCU_TRAMPOLINE_READERS a preemption outside trampoline text
is also a quiescent state, and the thing real readers (trampolines) do
to stay protected across their call-outs is take rcu_read_lock_trace(),
so have the torture readers do the same there. Otherwise a preempted
torture reader would rightly be treated as quiescent and the test would
report false-positive too-short grace periods.
Assisted-by: LLM
Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>
---
kernel/rcu/rcutorture.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c
index 794937e13e7c..ab870ef09af0 100644
--- a/kernel/rcu/rcutorture.c
+++ b/kernel/rcu/rcutorture.c
@@ -1142,13 +1142,23 @@ static struct rcu_torture_ops trivial_preempt_ops = {
* Definitions for RCU-tasks torture testing.
*/
+/*
+ * A classic Tasks RCU reader is any stretch of kernel code that does not
+ * voluntarily block. With CONFIG_TASKS_RCU_TRAMPOLINE_READERS a preemption
+ * outside trampoline text also ends it, and what a trampoline does to stay
+ * protected across its call-out is take a Tasks Trace reader, so model that.
+ */
static int tasks_torture_read_lock(void)
{
+ if (IS_ENABLED(CONFIG_TASKS_RCU_TRAMPOLINE_READERS))
+ rcu_read_lock_trace();
return 0;
}
static void tasks_torture_read_unlock(int idx)
{
+ if (IS_ENABLED(CONFIG_TASKS_RCU_TRAMPOLINE_READERS))
+ rcu_read_unlock_trace();
}
static void rcu_tasks_torture_deferred_free(struct rcu_torture *p)
--
2.55.0
|