From: Valentin Schneider <vschneid@redhat.com>
To: linux-kernel@vger.kernel.org, virtualization@lists.linux.dev,
linux-arm-kernel@lists.infradead.org, loongarch@lists.linux.dev,
linux-riscv@lists.infradead.org,
linux-perf-users@vger.kernel.org, kvm@vger.kernel.org,
linux-arch@vger.kernel.org, linux-modules@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, rcu@vger.kernel.org,
linux-hardening@vger.kernel.org, linux-kselftest@vger.kernel.org,
bpf@vger.kernel.org
Cc: "Paul E. McKenney" <paulmck@kernel.org>,
Frederic Weisbecker <frederic@kernel.org>,
Juri Lelli <juri.lelli@redhat.com>,
Marcelo Tosatti <mtosatti@redhat.com>,
Yair Podemsky <ypodemsk@redhat.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Daniel Wagner <dwagner@suse.de>, Petr Tesarik <ptesarik@suse.com>,
Nicolas Saenz Julienne <nsaenz@amazon.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
Sean Christopherson <seanjc@google.com>,
Juergen Gross <jgross@suse.com>,
Ajay Kaher <ajay.kaher@broadcom.com>,
Alexey Makhalov <alexey.amakhalov@broadcom.com>,
Broadcom internal kernel review list
<bcm-kernel-feedback-list@broadcom.com>,
Russell King <linux@armlinux.org.uk>,
Catalin Marinas <catalin.marinas@arm.com>,
Will Deacon <will@kernel.org>,
Huacai Chen <chenhuacai@kernel.org>,
WANG Xuerui <kernel@xen0n.name>,
Paul Walmsley <paul.walmsley@sifive.com>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>,
Peter Zijlstra <peterz@infradead.org>,
Arnaldo Carvalho de Melo <acme@kernel.org>,
Namhyung Kim <namhyung@kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Alexander Shishkin <alexander.shishkin@linux.intel.com>,
Jiri Olsa <jolsa@kernel.org>, Ian Rogers <irogers@google.com>,
Adrian Hunter <adrian.hunter@intel.com>,
"Liang, Kan" <kan.liang@linux.intel.com>,
Pawan Gupta <pawan.kumar.gupta@linux.intel.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Arnd Bergmann <arnd@arndb.de>, Jason Baron <jbaron@akamai.com>,
Steven Rostedt <rostedt@goodmis.org>,
Ard Biesheuvel <ardb@kernel.org>,
Luis Chamberlain <mcgrof@kernel.org>,
Petr Pavlu <petr.pavlu@suse.com>,
Sami Tolvanen <samitolvanen@google.com>,
Daniel Gomez <da.gomez@samsung.com>,
Naveen N Rao <naveen@kernel.org>,
Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>,
"David S. Miller" <davem@davemloft.net>,
Masami Hiramatsu <mhiramat@kernel.org>,
Neeraj Upadhyay <neeraj.upadhyay@kernel.org>,
Joel Fernandes <joel@joelfernandes.org>,
Josh Triplett <josh@joshtriplett.org>,
Boqun Feng <boqun.feng@gmail.com>,
Uladzislau Rezki <urezki@gmail.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Zqiang <qiang.zhang1211@gmail.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Dietmar Eggemann <dietmar.eggemann@arm.com>,
Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
Kees Cook <kees@kernel.org>, Shuah Khan <shuah@kernel.org>,
Masahiro Yamada <masahiroy@kernel.org>,
Alice Ryhl <aliceryhl@google.com>,
Miguel Ojeda <ojeda@kernel.org>,
"Mike Rapoport (Microsoft)" <rppt@kernel.org>,
Rong Xu <xur@google.com>, Rafael Aquini <aquini@redhat.com>,
Song Liu <song@kernel.org>, Andrii Nakryiko <andrii@kernel.org>,
Dan Carpenter <dan.carpenter@linaro.org>,
Brian Gerst <brgerst@gmail.com>,
"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
Benjamin Berg <benjamin.berg@intel.com>,
Vishal Annapurve <vannapurve@google.com>,
Randy Dunlap <rdunlap@infradead.org>,
John Stultz <jstultz@google.com>,
Tiezhu Yang <yangtiezhu@loongson.cn>
Subject: [PATCH v5 03/25] rcu: Add a small-width RCU watching counter debug option
Date: Tue, 29 Apr 2025 13:32:20 +0200 [thread overview]
Message-ID: <20250429113242.998312-4-vschneid@redhat.com> (raw)
In-Reply-To: <20250429113242.998312-1-vschneid@redhat.com>
A later commit will reduce the size of the RCU watching counter to free up
some bits for another purpose. Paul suggested adding a config option to
test the extreme case where the counter is reduced to its minimum usable
width for rcutorture to poke at, so do that.
Make it only configurable under RCU_EXPERT. While at it, add a comment to
explain the layout of context_tracking->state.
Link: http://lore.kernel.org/r/4c2cb573-168f-4806-b1d9-164e8276e66a@paulmck-laptop
Suggested-by: Paul E. McKenney <paulmck@kernel.org>
Signed-off-by: Valentin Schneider <vschneid@redhat.com>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
---
include/linux/context_tracking_state.h | 44 ++++++++++++++++++++++----
kernel/rcu/Kconfig.debug | 15 +++++++++
2 files changed, 52 insertions(+), 7 deletions(-)
diff --git a/include/linux/context_tracking_state.h b/include/linux/context_tracking_state.h
index 7b8433d5a8efe..0b81248aa03e2 100644
--- a/include/linux/context_tracking_state.h
+++ b/include/linux/context_tracking_state.h
@@ -18,12 +18,6 @@ enum ctx_state {
CT_STATE_MAX = 4,
};
-/* Odd value for watching, else even. */
-#define CT_RCU_WATCHING CT_STATE_MAX
-
-#define CT_STATE_MASK (CT_STATE_MAX - 1)
-#define CT_RCU_WATCHING_MASK (~CT_STATE_MASK)
-
struct context_tracking {
#ifdef CONFIG_CONTEXT_TRACKING_USER
/*
@@ -44,9 +38,45 @@ struct context_tracking {
#endif
};
+/*
+ * We cram two different things within the same atomic variable:
+ *
+ * CT_RCU_WATCHING_START CT_STATE_START
+ * | |
+ * v v
+ * MSB [ RCU watching counter ][ context_state ] LSB
+ * ^ ^
+ * | |
+ * CT_RCU_WATCHING_END CT_STATE_END
+ *
+ * Bits are used from the LSB upwards, so unused bits (if any) will always be in
+ * upper bits of the variable.
+ */
#ifdef CONFIG_CONTEXT_TRACKING
+#define CT_SIZE (sizeof(((struct context_tracking *)0)->state) * BITS_PER_BYTE)
+
+#define CT_STATE_WIDTH bits_per(CT_STATE_MAX - 1)
+#define CT_STATE_START 0
+#define CT_STATE_END (CT_STATE_START + CT_STATE_WIDTH - 1)
+
+#define CT_RCU_WATCHING_MAX_WIDTH (CT_SIZE - CT_STATE_WIDTH)
+#define CT_RCU_WATCHING_WIDTH (IS_ENABLED(CONFIG_RCU_DYNTICKS_TORTURE) ? 2 : CT_RCU_WATCHING_MAX_WIDTH)
+#define CT_RCU_WATCHING_START (CT_STATE_END + 1)
+#define CT_RCU_WATCHING_END (CT_RCU_WATCHING_START + CT_RCU_WATCHING_WIDTH - 1)
+#define CT_RCU_WATCHING BIT(CT_RCU_WATCHING_START)
+
+#define CT_STATE_MASK GENMASK(CT_STATE_END, CT_STATE_START)
+#define CT_RCU_WATCHING_MASK GENMASK(CT_RCU_WATCHING_END, CT_RCU_WATCHING_START)
+
+#define CT_UNUSED_WIDTH (CT_RCU_WATCHING_MAX_WIDTH - CT_RCU_WATCHING_WIDTH)
+
+static_assert(CT_STATE_WIDTH +
+ CT_RCU_WATCHING_WIDTH +
+ CT_UNUSED_WIDTH ==
+ CT_SIZE);
+
DECLARE_PER_CPU(struct context_tracking, context_tracking);
-#endif
+#endif /* CONFIG_CONTEXT_TRACKING */
#ifdef CONFIG_CONTEXT_TRACKING_USER
static __always_inline int __ct_state(void)
diff --git a/kernel/rcu/Kconfig.debug b/kernel/rcu/Kconfig.debug
index 12e4c64ebae15..625d75392647b 100644
--- a/kernel/rcu/Kconfig.debug
+++ b/kernel/rcu/Kconfig.debug
@@ -213,4 +213,19 @@ config RCU_STRICT_GRACE_PERIOD
when looking for certain types of RCU usage bugs, for example,
too-short RCU read-side critical sections.
+
+config RCU_DYNTICKS_TORTURE
+ bool "Minimize RCU dynticks counter size"
+ depends on RCU_EXPERT && !COMPILE_TEST
+ default n
+ help
+ This option sets the width of the dynticks counter to its
+ minimum usable value. This minimum width greatly increases
+ the probability of flushing out bugs involving counter wrap,
+ but it also increases the probability of extending grace period
+ durations. This Kconfig option should therefore be avoided in
+ production due to the consequent increased probability of OOMs.
+
+ This has no value for production and is only for testing.
+
endmenu # "RCU Debugging"
--
2.49.0
next prev parent reply other threads:[~2025-04-29 11:35 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-29 11:32 [PATCH v5 00/25] context_tracking,x86: Defer some IPIs until a user->kernel transition Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 01/25] objtool: Make validate_call() recognize indirect calls to pv_ops[] Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 02/25] objtool: Flesh out warning related to pv_ops[] calls Valentin Schneider
2025-04-29 11:32 ` Valentin Schneider [this message]
2025-04-29 11:32 ` [PATCH v5 04/25] rcutorture: Make TREE04 use CONFIG_RCU_DYNTICKS_TORTURE Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 05/25] jump_label: Add annotations for validating noinstr usage Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 06/25] static_call: Add read-only-after-init static calls Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 07/25] x86/paravirt: Mark pv_sched_clock static call as __ro_after_init Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 08/25] x86/idle: Mark x86_idle " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 09/25] x86/paravirt: Mark pv_steal_clock " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 10/25] riscv/paravirt: " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 11/25] loongarch/paravirt: " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 12/25] arm64/paravirt: " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 13/25] arm/paravirt: " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 14/25] perf/x86/amd: Mark perf_lopwr_cb " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 15/25] sched/clock: Mark sched_clock_running key " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 16/25] KVM: VMX: Mark __kvm_is_using_evmcs static " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 17/25] x86/speculation/mds: Mark mds_idle_clear key as allowed in .noinstr Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 18/25] sched/clock, x86: Mark __sched_clock_stable " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 19/25] KVM: VMX: Mark vmx_l1d_should flush and vmx_l1d_flush_cond keys " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 20/25] stackleack: Mark stack_erasing_bypass key " Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 21/25] objtool: Add noinstr validation for static branches/calls Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 22/25] module: Remove outdated comment about text_size Valentin Schneider
2025-05-05 14:27 ` Petr Pavlu
2025-04-29 11:32 ` [PATCH v5 23/25] module: Add MOD_NOINSTR_TEXT mem_type Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 24/25] context-tracking: Introduce work deferral infrastructure Valentin Schneider
2025-04-29 11:32 ` [PATCH v5 25/25] context_tracking,x86: Defer kernel text patching IPIs Valentin Schneider
2025-04-29 16:11 ` [PATCH v5 00/25] context_tracking,x86: Defer some IPIs until a user->kernel transition Dave Hansen
2025-04-30 17:20 ` Steven Rostedt
2025-04-30 18:07 ` Dave Hansen
2025-04-30 19:42 ` Steven Rostedt
2025-04-30 20:00 ` Dave Hansen
2025-05-02 9:55 ` Valentin Schneider
2025-05-02 13:53 ` Dave Hansen
2025-05-02 16:38 ` Valentin Schneider
2025-05-02 17:57 ` Dave Hansen
2025-05-05 15:45 ` Valentin Schneider
2025-05-02 11:22 ` Peter Zijlstra
2025-05-02 14:33 ` Dave Hansen
2025-05-02 15:20 ` Peter Zijlstra
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=20250429113242.998312-4-vschneid@redhat.com \
--to=vschneid@redhat.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=ajay.kaher@broadcom.com \
--cc=alex@ghiti.fr \
--cc=alexander.shishkin@linux.intel.com \
--cc=alexey.amakhalov@broadcom.com \
--cc=aliceryhl@google.com \
--cc=andrii@kernel.org \
--cc=anil.s.keshavamurthy@intel.com \
--cc=aou@eecs.berkeley.edu \
--cc=aquini@redhat.com \
--cc=ardb@kernel.org \
--cc=arnd@arndb.de \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=benjamin.berg@intel.com \
--cc=boqun.feng@gmail.com \
--cc=bp@alien8.de \
--cc=bpf@vger.kernel.org \
--cc=brgerst@gmail.com \
--cc=bsegall@google.com \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=da.gomez@samsung.com \
--cc=dan.carpenter@linaro.org \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=dietmar.eggemann@arm.com \
--cc=dwagner@suse.de \
--cc=frederic@kernel.org \
--cc=hpa@zytor.com \
--cc=irogers@google.com \
--cc=jbaron@akamai.com \
--cc=jgross@suse.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=jolsa@kernel.org \
--cc=josh@joshtriplett.org \
--cc=jpoimboe@kernel.org \
--cc=jstultz@google.com \
--cc=juri.lelli@redhat.com \
--cc=kan.liang@linux.intel.com \
--cc=kees@kernel.org \
--cc=kernel@xen0n.name \
--cc=kirill.shutemov@linux.intel.com \
--cc=kvm@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-hardening@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=linux-modules@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=loongarch@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=masahiroy@kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mcgrof@kernel.org \
--cc=mgorman@suse.de \
--cc=mhiramat@kernel.org \
--cc=mingo@redhat.com \
--cc=mtosatti@redhat.com \
--cc=namhyung@kernel.org \
--cc=naveen@kernel.org \
--cc=neeraj.upadhyay@kernel.org \
--cc=nsaenz@amazon.com \
--cc=ojeda@kernel.org \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=paulmck@kernel.org \
--cc=pawan.kumar.gupta@linux.intel.com \
--cc=pbonzini@redhat.com \
--cc=peterz@infradead.org \
--cc=petr.pavlu@suse.com \
--cc=ptesarik@suse.com \
--cc=qiang.zhang1211@gmail.com \
--cc=rcu@vger.kernel.org \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=samitolvanen@google.com \
--cc=seanjc@google.com \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=tglx@linutronix.de \
--cc=urezki@gmail.com \
--cc=vannapurve@google.com \
--cc=vincent.guittot@linaro.org \
--cc=virtualization@lists.linux.dev \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=xur@google.com \
--cc=yangtiezhu@loongson.cn \
--cc=ypodemsk@redhat.com \
/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