linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Frederic Weisbecker <frederic@kernel.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Frederic Weisbecker <frederic@kernel.org>,
	"Paul E . McKenney" <paulmck@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Phil Auld <pauld@redhat.com>,
	Marcelo Tosatti <mtosatti@redhat.com>
Subject: [PATCH 1/5] context_tracking: Introduce HAVE_CONTEXT_TRACKING_OFFSTACK
Date: Tue, 17 Nov 2020 16:16:33 +0100	[thread overview]
Message-ID: <20201117151637.259084-2-frederic@kernel.org> (raw)
In-Reply-To: <20201117151637.259084-1-frederic@kernel.org>

Historically, context tracking had to deal with fragile entry code path,
ie: before user_exit() is called and after user_enter() is called, in
case some of those spots would call schedule() or use RCU. On such
cases, the site had to be protected between exception_enter() and
exception_exit() that save the context tracking state in the task stack.

Such sleepable fragile code path had many different origins: tracing,
exceptions, early or late calls to context tracking on syscalls...

Aside of that not being pretty, saving the context tracking state on
the task stack forces us to run context tracking on all CPUs, including
housekeepers, and prevents us to completely shutdown nohz_full at
runtime on a CPU in the future as context tracking and its overhead
would still need to run system wide.

Now thanks to the extensive efforts to sanitize x86 entry code, those
conditions have been removed and we can now get rid of these workarounds
in this architecture.

Create a Kconfig feature to express this achievement.

Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Cc: Marcelo Tosatti <mtosatti@redhat.com>
Cc: Paul E. McKenney <paulmck@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Phil Auld <pauld@redhat.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
---
 arch/Kconfig | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/arch/Kconfig b/arch/Kconfig
index 56b6ccc0e32d..090ef3566c56 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -618,6 +618,23 @@ config HAVE_CONTEXT_TRACKING
 	  protected inside rcu_irq_enter/rcu_irq_exit() but preemption or signal
 	  handling on irq exit still need to be protected.
 
+config HAVE_CONTEXT_TRACKING_OFFSTACK
+	bool
+	help
+	  Architecture neither relies on exception_enter()/exception_exit()
+	  nor on schedule_user(). Also preempt_schedule_notrace() and
+	  preempt_schedule_irq() can't be called in a preemptible section
+	  while context tracking is CONTEXT_USER. This feature reflects a sane
+	  entry implementation where the following requirements are met on
+	  critical entry code, ie: before user_exit() or after user_enter():
+
+	  - Critical entry code isn't preemptible (or better yet:
+	    not interruptible).
+	  - No use of RCU read side critical sections, unless rcu_nmi_enter()
+	    got called.
+	  - No use of instrumentation, unless instrumentation_begin() got
+	    called.
+
 config HAVE_TIF_NOHZ
 	bool
 	help
-- 
2.25.1


  reply	other threads:[~2020-11-17 15:17 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-17 15:16 [PATCH 0/5] context_tracking: Flatter archs not using exception_enter/exit() v3 Frederic Weisbecker
2020-11-17 15:16 ` Frederic Weisbecker [this message]
2020-11-20 12:44   ` [tip: core/entry] context_tracking: Introduce HAVE_CONTEXT_TRACKING_OFFSTACK tip-bot2 for Frederic Weisbecker
2020-11-17 15:16 ` [PATCH 2/5] context_tracking: Don't implement exception_enter/exit() on CONFIG_HAVE_CONTEXT_TRACKING_OFFSTACK Frederic Weisbecker
2020-11-20 12:44   ` [tip: core/entry] " tip-bot2 for Frederic Weisbecker
2020-11-17 15:16 ` [PATCH 3/5] sched: Detect call to schedule from critical entry code Frederic Weisbecker
2020-11-20 12:44   ` [tip: core/entry] " tip-bot2 for Frederic Weisbecker
2020-11-17 15:16 ` [PATCH 4/5] context_tracking: Only define schedule_user() on !HAVE_CONTEXT_TRACKING_OFFSTACK archs Frederic Weisbecker
2020-11-20 12:44   ` [tip: core/entry] " tip-bot2 for Frederic Weisbecker
2020-11-17 15:16 ` [PATCH 5/5] x86: Support HAVE_CONTEXT_TRACKING_OFFSTACK Frederic Weisbecker
2020-11-20 12:44   ` [tip: core/entry] " tip-bot2 for Frederic Weisbecker
2020-11-18  7:39 ` [PATCH 0/5] context_tracking: Flatter archs not using exception_enter/exit() v3 Peter Zijlstra
2020-11-18 13:48   ` Frederic Weisbecker
2020-11-18 14:05     ` Peter Zijlstra
2020-11-18 14:20       ` Frederic Weisbecker
  -- strict thread matches above, loose matches on Subject: below --
2020-10-27 15:08 [PATCH 0/5] context_tracking: Flatter archs not using exception_enter/exit() v2 Frederic Weisbecker
2020-10-27 15:08 ` [PATCH 1/5] context_tracking: Introduce HAVE_CONTEXT_TRACKING_OFFSTACK Frederic Weisbecker
2020-10-05 10:49 [PATCH 0/5] context_tracking: Flatter archs not using exception_enter/exit() Frederic Weisbecker
2020-10-05 10:49 ` [PATCH 1/5] context_tracking: Introduce HAVE_CONTEXT_TRACKING_OFFSTACK Frederic Weisbecker

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=20201117151637.259084-2-frederic@kernel.org \
    --to=frederic@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=pauld@redhat.com \
    --cc=paulmck@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    /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;
as well as URLs for NNTP newsgroup(s).