From: "Paul E. McKenney" <paulmck@kernel.org>
To: rcu@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, kernel-team@fb.com, rostedt@goodmis.org
Subject: [PATCH rcu 0/11] NMI-safe SRCU readers for v6.2
Date: Wed, 19 Oct 2022 15:58:38 -0700 [thread overview]
Message-ID: <20221019225838.GA2500612@paulmck-ThinkPad-P17-Gen-1> (raw)
Hello!
This series provides the second version of an NMI-safe SRCU reader API in
the guise of srcu_read_lock_nmisafe() and srcu_read_unlock_nmisafe().
A given srcu_struct structure must use either the traditional
srcu_read_lock() and srcu_read_unlock() API or the new _nmisafe() API:
Mixing and matching is not permitted. So much so that kernels built
with CONFIG_PROVE_RCU=y will complain if you try it.
The reason for this restriction is that I have yet to find a use case
that is not a accident waiting to happen. And if free intermixing
were permitted, it is pretty much a given that someone somewhere will
get confused and use srcu_read_lock_nmisafe() within NMI handlers and
srcu_read_lock() elsewhere, which will not (repeat, NOT) provide NMI
safety.
The series is as follows:
1. Convert ->srcu_lock_count and ->srcu_unlock_count to atomic.
2. Create an srcu_read_lock_nmisafe() and srcu_read_unlock_nmisafe().
3. Check for consistent per-CPU per-srcu_struct NMI safety.
4. Check for consistent global per-srcu_struct NMI safety.
5. Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option.
6. Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option.
7. Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option.
8. Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option.
9. Warn when NMI-unsafe API is used in NMI, courtesy of Frederic
Weisbecker.
10. Explain the reason behind the read side critical section on GP
start, courtesy of Frederic Weisbecker.
11. Debug NMI safety even on archs that don't require it, courtesy
of Frederic Weisbecker.
Changes since v2:
1. Added ability for architectures having implicitly NMI-safe
SRCU readers to warn about uses that cause trouble for other
architectures.
Changes since v1:
1. Added enabling patches for arm64, loongarch, s390, and x86.
These have what appear to me to be NMI-safe this_cpu_inc()
implementations.
2. Fix a build error on !SMP kernels built without SRCU.
3. Fix a build error on !SMP kernels.
Thanx, Paul
------------------------------------------------------------------------
b/arch/Kconfig | 3 +
b/arch/arm64/Kconfig | 1
b/arch/loongarch/Kconfig | 1
b/arch/s390/Kconfig | 1
b/arch/x86/Kconfig | 1
b/include/linux/srcu.h | 39 ++++++++++++++
b/include/linux/srcutiny.h | 11 ++++
b/include/linux/srcutree.h | 4 -
b/kernel/rcu/Kconfig | 3 +
b/kernel/rcu/rcutorture.c | 11 +++-
b/kernel/rcu/srcutree.c | 24 ++++-----
include/linux/srcu.h | 48 +++++++++++++-----
include/linux/srcutiny.h | 16 ------
include/linux/srcutree.h | 19 +++----
kernel/rcu/srcutree.c | 118 +++++++++++++++++++++++++++++++++++----------
15 files changed, 224 insertions(+), 76 deletions(-)
next reply other threads:[~2022-10-19 22:58 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-19 22:58 Paul E. McKenney [this message]
2022-10-19 22:58 ` [PATCH v3 rcu 01/11] srcu: Convert ->srcu_lock_count and ->srcu_unlock_count to atomic Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 02/11] srcu: Create an srcu_read_lock_nmisafe() and srcu_read_unlock_nmisafe() Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 03/11] srcu: Check for consistent per-CPU per-srcu_struct NMI safety Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 04/11] srcu: Check for consistent global " Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 05/11] arch/x86: Add ARCH_HAS_NMI_SAFE_THIS_CPU_OPS Kconfig option Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 06/11] arch/arm64: " Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 07/11] arch/loongarch: " Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 08/11] arch/s390: " Paul E. McKenney
2022-10-20 5:16 ` Christian Borntraeger
2022-10-20 7:23 ` Heiko Carstens
2022-10-20 7:27 ` Heiko Carstens
2022-10-20 16:35 ` Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 09/11] srcu: Warn when NMI-unsafe API is used in NMI Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 10/11] srcu: Explain the reason behind the read side critical section on GP start Paul E. McKenney
2022-10-19 22:58 ` [PATCH v3 rcu 11/11] srcu: Debug NMI safety even on archs that don't require it Paul E. McKenney
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=20221019225838.GA2500612@paulmck-ThinkPad-P17-Gen-1 \
--to=paulmck@kernel.org \
--cc=kernel-team@fb.com \
--cc=linux-kernel@vger.kernel.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.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®