aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2013-07-09 20:44:35 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2013-08-14 11:14:46 -0400
commit48d6a816a8bf36e2a197c322697323003bdc1cfe (patch)
tree6a51b602ec4451b8443b2b58337e9a55c84ceb48 /kernel
parentad65782fba507d91a0a98f519b59e79cac1b474c (diff)
context_tracking: Optimize guest APIs off case with static key
Optimize guest entry/exit APIs with static keys. This minimize the overhead for those who enable CONFIG_NO_HZ_FULL without always using it. Having no range passed to nohz_full= should result in the probes overhead to be minimized. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> Cc: Ingo Molnar <mingo@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Li Zhong <zhong@linux.vnet.ibm.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Kevin Hilman <khilman@linaro.org>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/context_tracking.c23
-rw-r--r--kernel/sched/cputime.c2
2 files changed, 4 insertions, 21 deletions
diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c
index 6e89e094c80e..b6a186c4b886 100644
--- a/kernel/context_tracking.c
+++ b/kernel/context_tracking.c
@@ -21,8 +21,10 @@
21#include <linux/export.h> 21#include <linux/export.h>
22 22
23struct static_key context_tracking_enabled = STATIC_KEY_INIT_FALSE; 23struct static_key context_tracking_enabled = STATIC_KEY_INIT_FALSE;
24EXPORT_SYMBOL_GPL(context_tracking_enabled);
24 25
25DEFINE_PER_CPU(struct context_tracking, context_tracking); 26DEFINE_PER_CPU(struct context_tracking, context_tracking);
27EXPORT_SYMBOL_GPL(context_tracking);
26 28
27void context_tracking_cpu_set(int cpu) 29void context_tracking_cpu_set(int cpu)
28{ 30{
@@ -163,27 +165,6 @@ void context_tracking_user_exit(void)
163 local_irq_restore(flags); 165 local_irq_restore(flags);
164} 166}
165 167
166#ifdef CONFIG_VIRT_CPU_ACCOUNTING_GEN
167void guest_enter(void)
168{
169 if (vtime_accounting_enabled())
170 vtime_guest_enter(current);
171 else
172 current->flags |= PF_VCPU;
173}
174EXPORT_SYMBOL_GPL(guest_enter);
175
176void guest_exit(void)
177{
178 if (vtime_accounting_enabled())
179 vtime_guest_exit(current);
180 else
181 current->flags &= ~PF_VCPU;
182}
183EXPORT_SYMBOL_GPL(guest_exit);
184#endif /* CONFIG_VIRT_CPU_ACCOUNTING_GEN */
185
186
187/** 168/**
188 * context_tracking_task_switch - context switch the syscall callbacks 169 * context_tracking_task_switch - context switch the syscall callbacks
189 * @prev: the task that is being switched out 170 * @prev: the task that is being switched out
diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
index 223a35efa0a6..bb6b29a3067c 100644
--- a/kernel/sched/cputime.c
+++ b/kernel/sched/cputime.c
@@ -724,6 +724,7 @@ void vtime_guest_enter(struct task_struct *tsk)
724 current->flags |= PF_VCPU; 724 current->flags |= PF_VCPU;
725 write_sequnlock(&tsk->vtime_seqlock); 725 write_sequnlock(&tsk->vtime_seqlock);
726} 726}
727EXPORT_SYMBOL_GPL(vtime_guest_enter);
727 728
728void vtime_guest_exit(struct task_struct *tsk) 729void vtime_guest_exit(struct task_struct *tsk)
729{ 730{
@@ -732,6 +733,7 @@ void vtime_guest_exit(struct task_struct *tsk)
732 current->flags &= ~PF_VCPU; 733 current->flags &= ~PF_VCPU;
733 write_sequnlock(&tsk->vtime_seqlock); 734 write_sequnlock(&tsk->vtime_seqlock);
734} 735}
736EXPORT_SYMBOL_GPL(vtime_guest_exit);
735 737
736void vtime_account_idle(struct task_struct *tsk) 738void vtime_account_idle(struct task_struct *tsk)
737{ 739{