|  |  | 
  
    |  |  | 
 
  |   |  | 
  
    |  |  | 
  
    |  |  | 
  
    |   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
 | 
 |  | 
  
    |  |  |