WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] 64-bit failsafe callback


On 27 Mar 2006, at 23:36, Keir Fraser wrote:

We're, while porting the kernel code back to SLES9, running into a case where the failsafe callback gets entered. Looking at that code we don't seem to be able to understand how it is actually expected to work. That code, out of load_segments, stores the selectors (including one or more that failed) into the (extended) frame for the kernel to pick them up. The kernel code, however, simply re-does the load of these selectors - how can that be expected to work any better than in the hypervisor? Further, the kernel blindly loads fs and gs, without caring to destroy their base addresses and, even more importantly, its own ability to access the PDA.

Xen allows the kernel to do something smarter if it wants, but the correct thing in Linux is to simply zero invalid selectors, so that's what the failsafe callback handler does. The reload into %gs is indeed bogus -- it should instead HYPERVISOR_set_segment_base(SEGBASE_GS_USER_SEL, gs).

Actually, I think that segment reload portion of the failsafe handler can be got rid of entirely since Xen will already zero an unloadable segment register, plus Xen has all the logic right to make sure that base addresses are preserved. So, as you say, the Linux attempt to load those segment registers really can do no good. :-)

I'll fix that in -unstable.

 Thanks,
 Keir


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