Small change to remove difference between Xen and mainline deactivate_mm. While there, cleanup prepare_arch_switch as well. This generates identical code. Signed-off-by: Chris Wright <chrisw@osdl.org> --- 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 *)¤t->thread.fs), - "=m" (*(int *)¤t->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) ); } @@ -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)) #define activate_mm(prev, next) \ switch_mm((prev),(next),NULL) _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Vincent Hanquez
2005-Aug-12 23:23 UTC
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 *)¤t->thread.fs), > - "=m" (*(int *)¤t->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@lists.xensource.com http://lists.xensource.com/xen-devel
Chris Wright
2005-Aug-12 23:55 UTC
Re: [Xen-devel] [PATCH] %fs/%gs cleanup in mmu_context.h
* Vincent Hanquez (vincent.hanquez@cl.cam.ac.uk) wrote:> 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 *)¤t->thread.fs), > > - "=m" (*(int *)¤t->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".Thanks Vincent (I had forgotten about that thread, ISTR Linus agruing vehemently against the change). Heh, the irony, objdump is showing the assembler generating movl in both cases. I have no preference, I''ll resubmit. thanks, -chris _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel