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