[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Re: Avoid alloc for xsave before xsave_init
The test showed on my machine showed that xsave areas of idle vcpus are inconsistent. With four CPUs, the code did the following: 1. vcpu 0 of idle domain * xsave_alloc_save_area() is called. * xsave_cntxt_size is 0; so vcpu->arch.xsave_area is 0 bytes. * vcpu->arch.xcr0 and vcpu->arch.xcr0_accum is 0x3.2. Then, xsave_init() is called. xsave_cntxt_size is now initialized correctly. 3. After that, vcpu 1, 2, 3 of idle domain have * xsave_alloc_save_area() is called.* xsave_cntxt_size is correct; so vcpu->arch.xsave_area points to an allocated area. * vcpu->arch.xcr0 and vcpu->arch.xcr0_accum is 0x3.In other words, vcpu0 has a different xsave_area from other vcpus. I think the following patch should fix the issues above: diff -r 20b0f709153e xen/arch/x86/i387.c --- a/xen/arch/x86/i387.c Wed Jan 12 14:14:13 2011 +0000 +++ b/xen/arch/x86/i387.c Thu Jan 13 18:08:30 2011 -0600 @@ -33,7 +33,7 @@ if ( cr0 & X86_CR0_TS ) clts(); - if ( cpu_has_xsave ) + if ( cpu_has_xsave && !is_idle_vcpu(v) ) {/* XCR0 normally represents what guest OS set. In case of Xen itself, * we set all accumulated feature mask before doing save/restore. @@ -214,7 +214,7 @@ { void *save_area; - if ( !cpu_has_xsave ) + if ( !cpu_has_xsave || is_idle_vcpu(v) ) return 0; /* XSAVE/XRSTOR requires the save area be 64-byte-boundary aligned. */ On 01/13/2011 03:15 PM, Keir Fraser wrote: On 13/01/2011 20:21, "Huang2, Wei"<Wei.Huang2@xxxxxxx> wrote:Hi Gang, Was the issue caused by the uninitialized variable xsave_cntxt_size, triggering problem for _xmalloc()? If so, one solution is to set xsave_cntxt_size=576 (the default value after reset) as a default value. When xsave_alloc_save_area() is called for idel VCPU, _xmalloc() will initialize 576 bytes. Idle domain doesn't change xcr0 from my understanding. So its xcr0 is XSTATE_FP_SSE all the time.Idle domain isn't using FPU,SSE,AVX or any such extended state and doesn't need it saved. Xsave_{alloc,free}_save_area() should test-and-exit on is_idle_vcpu(), and our context switch code should not be doing XSAVE when switching out an idle vcpu (I hope this is the case already, as it would be a pointless waste of time). -- KeirBest, -Wei -----Original Message----- From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx [mailto:xen-devel-bounces@xxxxxxxxxxxxxxxxxxx] On Behalf Of Wei, Gang Sent: Thursday, January 13, 2011 12:49 PM To: xen-devel@xxxxxxxxxxxxxxxxxxx Cc: Keir Fraser; Wei, Gang Subject: [Xen-devel] Avoid alloc for xsave before xsave_init While debugging some weird booting failure bugs, just found currently, xsave_alloc_save_area will be called in init_idle_domain->scheduler_init->alloc_vcpu->vcpu_initialise calls, it is earlier than xsave_init called in identity_cpu(). This may causing buffer overflow on xmem_pool. I am thinking about how to fix it. Jimmy _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |