From 67c423f201ec98ad81746bbb5a475c2b65dea5c3 Mon Sep 17 00:00:00 2001 From: John Blackwood Date: Fri, 7 Apr 2006 19:50:25 +0200 Subject: [PATCH] --- yaml --- r: 25343 b: refs/heads/master c: 97c2803c9c694cafbd9f5e43a25903e0abf25188 h: refs/heads/master i: 25341: d3cbd5a805e1bfcc672547f482fbb412d61ca834 25339: b381421ae26792ebee50c26fb46254dee986c325 25335: 011031528208f7adac0206b7a7cb1ac39c939eab 25327: 03b4815f57e4f2e62633e0cd7503d5d5ef7a6e95 25311: 8a1bbad8356d73d4cc6dbcffbc7cfb5f03be9da5 25279: dcc88a557493fa6ef8b9819660cedf5f2c28b22b 25215: 00b7f90fb366fe6da8890c6c59ba8d52da21f818 25087: 51d08bd9eeae8ea5aa4e70ac0429956f5e7ffdd8 v: v3 --- [refs] | 2 +- trunk/arch/x86_64/kernel/process.c | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index a94d974f3676..d08161218c9f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: e48c4729d23a026f3711d5e36add5cce894b4913 +refs/heads/master: 97c2803c9c694cafbd9f5e43a25903e0abf25188 diff --git a/trunk/arch/x86_64/kernel/process.c b/trunk/arch/x86_64/kernel/process.c index 70dd8e5c6889..1c44b53cb15b 100644 --- a/trunk/arch/x86_64/kernel/process.c +++ b/trunk/arch/x86_64/kernel/process.c @@ -781,10 +781,16 @@ long do_arch_prctl(struct task_struct *task, int code, unsigned long addr) } case ARCH_GET_GS: { unsigned long base; + unsigned gsindex; if (task->thread.gsindex == GS_TLS_SEL) base = read_32bit_tls(task, GS_TLS); - else if (doit) - rdmsrl(MSR_KERNEL_GS_BASE, base); + else if (doit) { + asm("movl %%gs,%0" : "=r" (gsindex)); + if (gsindex) + rdmsrl(MSR_KERNEL_GS_BASE, base); + else + base = task->thread.gs; + } else base = task->thread.gs; ret = put_user(base, (unsigned long __user *)addr);