[<prev] [next>] [day] [month] [year] [list]
Message-ID: <1292287821.5015.1784.camel@gandalf.stny.rr.com>
Date: Mon, 13 Dec 2010 19:50:21 -0500
From: Steven Rostedt <rostedt@...dmis.org>
To: LKML <linux-kernel@...r.kernel.org>
Cc: Ingo Molnar <mingo@...e.hu>, Thomas Gleixner <tglx@...utronix.de>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: [PATCH][GIT PULL] x86: Remove unlikey()'s from sched_switch
segment tests
Ingo or Thomas,
Please pull the latest unlikely/x86 tree, which can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
unlikely/x86
Steven Rostedt (1):
x86: Remove unlikey()'s from sched_switch segment tests
----
arch/x86/kernel/process_64.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
---------------------------
commit 6ddd9593268de1cc4438e5f2e680887af292f350
Author: Steven Rostedt <srostedt@...hat.com>
Date: Mon Dec 6 16:04:10 2010 -0500
x86: Remove unlikey()'s from sched_switch segment tests
On a 64bit distro, the chances of having a process using segment registers
is very unlikely. But if the userspace is 32bit running on top of
a 64bit kernel (very common), then this will be very likely that
processes have segment registers in use.
Running on my main desktop (which is a 32bit userspace on top of
a 64bit kernel) the annotated branch profiler showed the following:
correct incorrect % Function File Line
------- --------- - -------- ---- ----
25522442 304125815 92 __switch_to process_64.c 408
25522430 304123341 92 __switch_to process_64.c 412
25743877 303891250 92 __switch_to process_64.c 464
Instead of punishing 32bit userspace systems with an unlikely, just remove
the unlikely and let gcc optimize for what it thinks is good and let
the branch prediction (hopefully) work.
Cc: Thomas Gleixner <tglx@...utronix.de>
Signed-off-by: Steven Rostedt <rostedt@...dmis.org>
diff --git a/arch/x86/kernel/process_64.c b/arch/x86/kernel/process_64.c
index b3d7a3a..22de90c 100644
--- a/arch/x86/kernel/process_64.c
+++ b/arch/x86/kernel/process_64.c
@@ -405,11 +405,11 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
* This won't pick up thread selector changes, but I guess that is ok.
*/
savesegment(es, prev->es);
- if (unlikely(next->es | prev->es))
+ if (next->es | prev->es)
loadsegment(es, next->es);
savesegment(ds, prev->ds);
- if (unlikely(next->ds | prev->ds))
+ if (next->ds | prev->ds)
loadsegment(ds, next->ds);
@@ -461,7 +461,7 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
wrmsrl(MSR_FS_BASE, next->fs);
prev->fsindex = fsindex;
- if (unlikely(gsindex | next->gsindex | prev->gs)) {
+ if (gsindex | next->gsindex | prev->gs) {
load_gs_index(next->gsindex);
if (gsindex)
prev->gs = 0;
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists