diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2013-07-09 20:44:35 -0400 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2013-08-14 11:14:46 -0400 |
commit | 48d6a816a8bf36e2a197c322697323003bdc1cfe (patch) | |
tree | 6a51b602ec4451b8443b2b58337e9a55c84ceb48 /kernel | |
parent | ad65782fba507d91a0a98f519b59e79cac1b474c (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.c | 23 | ||||
-rw-r--r-- | kernel/sched/cputime.c | 2 |
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 | ||
23 | struct static_key context_tracking_enabled = STATIC_KEY_INIT_FALSE; | 23 | struct static_key context_tracking_enabled = STATIC_KEY_INIT_FALSE; |
24 | EXPORT_SYMBOL_GPL(context_tracking_enabled); | ||
24 | 25 | ||
25 | DEFINE_PER_CPU(struct context_tracking, context_tracking); | 26 | DEFINE_PER_CPU(struct context_tracking, context_tracking); |
27 | EXPORT_SYMBOL_GPL(context_tracking); | ||
26 | 28 | ||
27 | void context_tracking_cpu_set(int cpu) | 29 | void 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 | ||
167 | void guest_enter(void) | ||
168 | { | ||
169 | if (vtime_accounting_enabled()) | ||
170 | vtime_guest_enter(current); | ||
171 | else | ||
172 | current->flags |= PF_VCPU; | ||
173 | } | ||
174 | EXPORT_SYMBOL_GPL(guest_enter); | ||
175 | |||
176 | void guest_exit(void) | ||
177 | { | ||
178 | if (vtime_accounting_enabled()) | ||
179 | vtime_guest_exit(current); | ||
180 | else | ||
181 | current->flags &= ~PF_VCPU; | ||
182 | } | ||
183 | EXPORT_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 | } |
727 | EXPORT_SYMBOL_GPL(vtime_guest_enter); | ||
727 | 728 | ||
728 | void vtime_guest_exit(struct task_struct *tsk) | 729 | void 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 | } |
736 | EXPORT_SYMBOL_GPL(vtime_guest_exit); | ||
735 | 737 | ||
736 | void vtime_account_idle(struct task_struct *tsk) | 738 | void vtime_account_idle(struct task_struct *tsk) |
737 | { | 739 | { |