From: riel@redhat.com
To: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org, mtosatti@redhat.com,
mingo@kernel.org, ak@linux.intel.com, oleg@redhat.com,
masami.hiramatsu.pt@hitachi.com, fweisbec@gmail.com,
paulmck@linux.vnet.ibm.com, lcapitulino@redhat.com,
pbonzini@redhat.com
Subject: [PATCH 1/4] rcu,nohz: add state parameter to context_tracking_user_enter/exit
Date: Thu, 5 Feb 2015 11:35:31 -0500 [thread overview]
Message-ID: <1423154134-17391-2-git-send-email-riel@redhat.com> (raw)
In-Reply-To: <1423154134-17391-1-git-send-email-riel@redhat.com>
From: Rik van Riel <riel@redhat.com>
Add the expected ctx_state as a parameter to context_tracking_user_enter
and context_tracking_user_exit, allowing the same functions to not just
track kernel <> user space switching, but also kernel <> guest transitions.
Signed-off-by: Rik van Riel <riel@redhat.com>
---
include/linux/context_tracking.h | 12 ++++++------
kernel/context_tracking.c | 10 +++++-----
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/include/linux/context_tracking.h b/include/linux/context_tracking.h
index 37b81bd51ec0..bd9f000fc98d 100644
--- a/include/linux/context_tracking.h
+++ b/include/linux/context_tracking.h
@@ -10,21 +10,21 @@
#ifdef CONFIG_CONTEXT_TRACKING
extern void context_tracking_cpu_set(int cpu);
-extern void context_tracking_user_enter(void);
-extern void context_tracking_user_exit(void);
+extern void context_tracking_user_enter(enum ctx_state state);
+extern void context_tracking_user_exit(enum ctx_state state);
extern void __context_tracking_task_switch(struct task_struct *prev,
struct task_struct *next);
static inline void user_enter(void)
{
if (context_tracking_is_enabled())
- context_tracking_user_enter();
+ context_tracking_user_enter(IN_USER);
}
static inline void user_exit(void)
{
if (context_tracking_is_enabled())
- context_tracking_user_exit();
+ context_tracking_user_exit(IN_USER);
}
static inline enum ctx_state exception_enter(void)
@@ -35,7 +35,7 @@ static inline enum ctx_state exception_enter(void)
return 0;
prev_ctx = this_cpu_read(context_tracking.state);
- context_tracking_user_exit();
+ context_tracking_user_exit(prev_ctx);
return prev_ctx;
}
@@ -44,7 +44,7 @@ static inline void exception_exit(enum ctx_state prev_ctx)
{
if (context_tracking_is_enabled()) {
if (prev_ctx == IN_USER)
- context_tracking_user_enter();
+ context_tracking_user_enter(prev_ctx);
}
}
diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c
index 937ecdfdf258..4c010787c9ec 100644
--- a/kernel/context_tracking.c
+++ b/kernel/context_tracking.c
@@ -47,7 +47,7 @@ void context_tracking_cpu_set(int cpu)
* to execute won't use any RCU read side critical section because this
* function sets RCU in extended quiescent state.
*/
-void context_tracking_user_enter(void)
+void context_tracking_user_enter(enum ctx_state state)
{
unsigned long flags;
@@ -75,7 +75,7 @@ void context_tracking_user_enter(void)
WARN_ON_ONCE(!current->mm);
local_irq_save(flags);
- if ( __this_cpu_read(context_tracking.state) != IN_USER) {
+ if ( __this_cpu_read(context_tracking.state) != state) {
if (__this_cpu_read(context_tracking.active)) {
trace_user_enter(0);
/*
@@ -101,7 +101,7 @@ void context_tracking_user_enter(void)
* OTOH we can spare the calls to vtime and RCU when context_tracking.active
* is false because we know that CPU is not tickless.
*/
- __this_cpu_write(context_tracking.state, IN_USER);
+ __this_cpu_write(context_tracking.state, state);
}
local_irq_restore(flags);
}
@@ -118,7 +118,7 @@ NOKPROBE_SYMBOL(context_tracking_user_enter);
* This call supports re-entrancy. This way it can be called from any exception
* handler without needing to know if we came from userspace or not.
*/
-void context_tracking_user_exit(void)
+void context_tracking_user_exit(enum ctx_state state)
{
unsigned long flags;
@@ -129,7 +129,7 @@ void context_tracking_user_exit(void)
return;
local_irq_save(flags);
- if (__this_cpu_read(context_tracking.state) == IN_USER) {
+ if (__this_cpu_read(context_tracking.state) == state) {
if (__this_cpu_read(context_tracking.active)) {
/*
* We are going to run code that may use RCU. Inform
--
1.9.3
next prev parent reply other threads:[~2015-02-05 16:35 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-05 16:35 [PATCH 0/4] rcu,nohz,kvm: use RCU extended quiescent state when running KVM guest riel
2015-02-05 16:35 ` riel [this message]
2015-02-05 16:35 ` [PATCH 2/4] rcu,nohz: run vtime_user_enter/exit only when state == IN_USER riel
2015-02-05 16:35 ` [PATCH 3/4] nohz,kvm: export context_tracking_user_enter/exit riel
2015-02-05 16:35 ` [PATCH 4/4] kvm,rcu: use RCU extended quiescent state when running KVM guest riel
2015-02-05 16:44 ` Christian Borntraeger
2015-02-05 16:52 ` Rik van Riel
2015-02-05 17:50 ` Paul E. McKenney
2015-02-05 18:09 ` Rik van Riel
2015-02-05 18:56 ` Paul E. McKenney
2015-02-05 18:59 ` Rik van Riel
2015-02-05 19:02 ` Rik van Riel
2015-02-05 19:27 ` Paul E. McKenney
2015-02-05 20:19 ` Rik van Riel
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=1423154134-17391-2-git-send-email-riel@redhat.com \
--to=riel@redhat.com \
--cc=ak@linux.intel.com \
--cc=fweisbec@gmail.com \
--cc=kvm@vger.kernel.org \
--cc=lcapitulino@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=mingo@kernel.org \
--cc=mtosatti@redhat.com \
--cc=oleg@redhat.com \
--cc=paulmck@linux.vnet.ibm.com \
--cc=pbonzini@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.