[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] %fs/%gs cleanup in mmu_context.h



On Fri, Aug 12, 2005 at 04:05:49PM -0700, Chris Wright wrote:
> 
> diff -r ba46bd7f5cdf 
> linux-2.6-xen-sparse/include/asm-xen/asm-i386/mmu_context.h
> --- a/linux-2.6-xen-sparse/include/asm-xen/asm-i386/mmu_context.h     Fri Aug 
> 12 15:59:34 2005
> +++ b/linux-2.6-xen-sparse/include/asm-xen/asm-i386/mmu_context.h     Fri Aug 
> 12 15:59:38 2005
> @@ -34,10 +34,10 @@
>        * are always kernel segments while inside the kernel. Must
>        * happen before reload of cr3/ldt (i.e., not in __switch_to).
>        */
> -     __asm__ __volatile__ ( "mov %%fs,%0 ; mov %%gs,%1"
> -             : "=m" (*(int *)&current->thread.fs),
> -               "=m" (*(int *)&current->thread.gs));
> -     __asm__ __volatile__ ( "mov %0,%%fs ; mov %0,%%gs"
> +     asm volatile ( "movl %%fs,%0 ; movl %%gs,%1"
> +             : "=m" (current->thread.fs),
> +               "=m" (current->thread.gs));
> +     asm volatile ( "movl %0,%%fs ; movl %0,%%gs"
>               : : "r" (0) );
>  }
>  

The first inline asm is wrong.
latest binutils no longer accept instructions for moving between a
segment register and a 32bit memory location. you should keep the "mov"
instead of "movl".

see:
http://sourceware.org/ml/binutils/2005-03/msg00873.html

> @@ -100,7 +100,7 @@
>  }
>  
>  #define deactivate_mm(tsk, mm) \
> -     asm("mov %0,%%fs ; mov %0,%%gs": :"r" (0))
> +     asm("movl %0,%%fs ; movl %0,%%gs": :"r" (0))

This one clearing the segment register is fine.

-- 
Vincent Hanquez

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.