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/
Home Products Support Community News


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. :-)

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