|  |  | 
  
    |  |  | 
 
  |   |  | 
  
    |  |  | 
  
    |  |  | 
  
    |   xen-devel
Re: [Xen-devel] Re: x86_64 SMP support (status update) 
| 
On 27 Jun 2005, at 23:15, Nakajima, Jun wrote:
 
The nptl01 runs fine on dom0 as long as it
runs _alone_. It starts failing with presence of domUs. I feel this
implies some problems with GDT switching. Is there any race you think 
of 
where modifications to GDT (done by do_update_descriptor) are not be
visible or deferred?
 
Actually, the bug is in XenLinux. You need to save DS-GS (and possibly 
also clear each one, if it is not already zero) before switching CR3 in 
switch_mm. We use prepare_arch_switch() hook in 
include/asm-xen/asm-i386/mmu_context.h for this purpose (although on 
i386 we only need to save/clear FS-GS at that point). 
What is currently happening is that a domain ctxt switch is happening 
after switch_mm but before __switch_to. So when Xen switches back to 
your test domain, it tries to load old process's FS value and fails -- 
traps up to XenLinux which sets FS to zero. So you end up saving FS==0 
for the nptl process and next time XenLinux switches to it you are 
toast. :-) 
Solution:
Move segment save/clear to prepare_arch_switch. Remove segment save 
from __switch_to. If you choose to clear segment registers in 
prepare_arch_switch, remove the test of prev->{ds,es,fs,gs} from 
segment reload tests. 
 -- Keir
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
 | 
 |  | 
  
    |  |  |