[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH V7 3/3] x86/xsaves: ebx may return wrong value using CPUID eax=0xdh, ecx =1
>>> On 31.03.16 at 10:57, <shuai.ruan@xxxxxxxxxxxxxxx> wrote: > Refer to SDM 13.4.3 Extended Region of an XSAVE Area. The value return No section numbers please - they tend to change. > by ecx[1] with cpuid function 0xdh and sub-fucntion i (i>1) indicates Either "0xd" or "0dh". And "function". > --- a/xen/arch/x86/traps.c > +++ b/xen/arch/x86/traps.c > @@ -1020,6 +1020,18 @@ void pv_cpuid(struct cpu_user_regs *regs) > a &= > (boot_cpu_data.x86_capability[cpufeat_word(X86_FEATURE_XSAVEOPT)] & > ~cpufeat_mask(X86_FEATURE_XSAVES)); > b = c = d = 0; > + if ( cpu_has_xsavec ) > + { > + b = XSTATE_AREA_MIN_SIZE; Is this really correct namely when curr->arch.xcr0 == 0? If not, the if() below should perhaps be combined with the if() above (and then the same would apply to hvm_cpuid()). > + if ( curr->arch.xcr0 ) > + for( subleaf = 2; subleaf < 63; subleaf++ ) > + if ( (1ULL << subleaf) & curr->arch.xcr0 ) The first if() is redundant with this second one. If you really mean to avoid the loop, then please also only check bits 2..62 in the first if(). Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |