Re: 2.6.33-rc2: Xen/Guest switching to user mode with no user pagetables

From: Cyrill Gorcunov
Date: Fri Jan 08 2010 - 16:50:48 EST

On Thu, Jan 07, 2010 at 11:30:46AM -0800, Christian Kujau wrote:
> On Thu, 7 Jan 2010 at 11:19, H. Peter Anvin wrote:
> > The big difference between the code before and after this commit is that
> > before, kernel_thread() would initialize the pt_regs structure with
> > whatever state happened to be passed into it by the caller, whereas
> > afterwards it is initialized to zero.
> To be honest, bisection was kinda hazy in the last step (see my previous
> mails), but from looking at the bisection log, it's definitely one of
> your/Brians commit (sorry!), so it may be 3bd95dfb in combination with the
> other 4 changes. However, only with 3bd95dfb applied, the DomU wouldn't
> start at all. With the only other patches applied, the DomU would start,
> and then die with a GPF.
> Christian.
> --
> BOFH excuse #191:
> Just type 'mv * /dev/null'.

OK, perhaps the patch below is not _that_ stupid so I
would like to get it reviewed and tested if possible.
Just a thought. Wonder if it help but definitely it will
not harm anyway :)

-- Cyrill
x86: kernel_thread -- initialize SS to a known state

Before the kernel_thread was converted into "C" we had
pt_regs::ss set to __KERNEL_DS (by SAVE_ALL asm macro).

Though I must admit I didn't find any *explicit* load of
%ss from this structure the better to be on a safe side
and set it to a known value.

Signed-off-by: Cyrill Gorcunov <gorcunov@xxxxxxxxxx>
arch/x86/kernel/process.c | 2 ++
1 file changed, 2 insertions(+)

Index: linux-2.6.git/arch/x86/kernel/process.c
--- linux-2.6.git.orig/arch/x86/kernel/process.c
+++ linux-2.6.git/arch/x86/kernel/process.c
@@ -288,6 +288,8 @@ int kernel_thread(int (*fn)(void *), voi = __USER_DS;
+ = __KERNEL_DS;

regs.orig_ax = -1;
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at