aboutsummaryrefslogtreecommitdiff
path: root/arch/x86/include/asm/rcu.h
diff options
context:
space:
mode:
authorIngo Molnar <mingo@kernel.org>2012-09-27 08:09:38 +0200
committerIngo Molnar <mingo@kernel.org>2012-09-27 08:09:38 +0200
commitfa34da708cbe1e2d9a2ee7fc68ea8fccbf095d12 (patch)
treeb20795decb064af75aae8f9f6af77806b1a4769a /arch/x86/include/asm/rcu.h
parenta9b86fab4b0a36fc4cd2712a07259c2c0e769742 (diff)
parentcb349ca95407cbc11424d5e9fc7c8e700709041b (diff)
Merge branch 'rcu/idle' of git://git.kernel.org/pub/scm/linux/kernel/git/paulmck/linux-rcu into core/rcu
Pull the RCU adaptive-idle feature from Paul E. McKenney: "This series adds RCU APIs that allow non-idle tasks to enter RCU idle mode and provides x86 code to make use of them, allowing RCU to treat user-mode execution as an extended quiescent state when the new RCU_USER_QS kernel configuration parameter is specified. Work is in progress to port this to a few other architectures, but is not part of this series." Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/include/asm/rcu.h')
-rw-r--r--arch/x86/include/asm/rcu.h32
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/x86/include/asm/rcu.h b/arch/x86/include/asm/rcu.h
new file mode 100644
index 00000000000..d1ac07a2397
--- /dev/null
+++ b/arch/x86/include/asm/rcu.h
@@ -0,0 +1,32 @@
+#ifndef _ASM_X86_RCU_H
+#define _ASM_X86_RCU_H
+
+#ifndef __ASSEMBLY__
+
+#include <linux/rcupdate.h>
+#include <asm/ptrace.h>
+
+static inline void exception_enter(struct pt_regs *regs)
+{
+ rcu_user_exit();
+}
+
+static inline void exception_exit(struct pt_regs *regs)
+{
+#ifdef CONFIG_RCU_USER_QS
+ if (user_mode(regs))
+ rcu_user_enter();
+#endif
+}
+
+#else /* __ASSEMBLY__ */
+
+#ifdef CONFIG_RCU_USER_QS
+# define SCHEDULE_USER call schedule_user
+#else
+# define SCHEDULE_USER call schedule
+#endif
+
+#endif /* !__ASSEMBLY__ */
+
+#endif