diff options
author | Tim Blechmann <tim@klingt.org> | 2009-11-24 05:55:27 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2009-11-24 06:18:42 -0500 |
commit | 710390d90f143a9ebb87a475215140f426792efd (patch) | |
tree | 53b2019edf0d25f3530e0c169ec01e7e115125d1 | |
parent | 36ace27e3e60d44ea69ce394b2e45386ae98d9d9 (diff) |
sched: Optimize branch hint in context_switch()
Branch hint profiling on my nehalem machine showed over 90%
incorrect branch hints:
10420275 170645395 94 context_switch sched.c
3043
10408421 171098521 94 context_switch sched.c
3050
Signed-off-by: Tim Blechmann <tim@klingt.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Mike Galbraith <efault@gmx.de>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
LKML-Reference: <4B0BBB9F.6080304@klingt.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | kernel/sched.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/sched.c b/kernel/sched.c index 93474a7935ae..010d5e16b4c5 100644 --- a/kernel/sched.c +++ b/kernel/sched.c | |||
@@ -2829,14 +2829,14 @@ context_switch(struct rq *rq, struct task_struct *prev, | |||
2829 | */ | 2829 | */ |
2830 | arch_start_context_switch(prev); | 2830 | arch_start_context_switch(prev); |
2831 | 2831 | ||
2832 | if (unlikely(!mm)) { | 2832 | if (likely(!mm)) { |
2833 | next->active_mm = oldmm; | 2833 | next->active_mm = oldmm; |
2834 | atomic_inc(&oldmm->mm_count); | 2834 | atomic_inc(&oldmm->mm_count); |
2835 | enter_lazy_tlb(oldmm, next); | 2835 | enter_lazy_tlb(oldmm, next); |
2836 | } else | 2836 | } else |
2837 | switch_mm(oldmm, mm, next); | 2837 | switch_mm(oldmm, mm, next); |
2838 | 2838 | ||
2839 | if (unlikely(!prev->mm)) { | 2839 | if (likely(!prev->mm)) { |
2840 | prev->active_mm = NULL; | 2840 | prev->active_mm = NULL; |
2841 | rq->prev_mm = oldmm; | 2841 | rq->prev_mm = oldmm; |
2842 | } | 2842 | } |