From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42652) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDBh8-0001IQ-UD for qemu-devel@nongnu.org; Thu, 09 Jul 2015 09:16:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZDBh5-0007NZ-KA for qemu-devel@nongnu.org; Thu, 09 Jul 2015 09:16:54 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36919) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZDBh5-0007NV-FF for qemu-devel@nongnu.org; Thu, 09 Jul 2015 09:16:51 -0400 References: <1436429849-18052-1-git-send-email-rth@twiddle.net> <1436429849-18052-4-git-send-email-rth@twiddle.net> From: Paolo Bonzini Message-ID: <559E7440.40107@redhat.com> Date: Thu, 9 Jul 2015 15:16:48 +0200 MIME-Version: 1.0 In-Reply-To: <1436429849-18052-4-git-send-email-rth@twiddle.net> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 03/14] target-i386: Add XSAVE extension List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson , qemu-devel@nongnu.org Cc: ehabkost@redhat.com On 09/07/2015 10:17, Richard Henderson wrote: > diff --git a/target-i386/kvm.c b/target-i386/kvm.c > index daced5c..f057982 100644 > --- a/target-i386/kvm.c > +++ b/target-i386/kvm.c > @@ -1541,16 +1541,22 @@ static int kvm_get_sregs(X86CPU *cpu) > #define HFLAG_COPY_MASK \ > ~( HF_CPL_MASK | HF_PE_MASK | HF_MP_MASK | HF_EM_MASK | \ > HF_TS_MASK | HF_TF_MASK | HF_VM_MASK | HF_IOPL_MASK | \ > - HF_OSFXSR_MASK | HF_LMA_MASK | HF_CS32_MASK | \ > + HF_OSFXSR_MASK | HF_OSXSAVE_MASK | HF_LMA_MASK | HF_CS32_MASK | \ > HF_SS32_MASK | HF_CS64_MASK | HF_ADDSEG_MASK) > > - hflags = (env->segs[R_SS].flags >> DESC_DPL_SHIFT) & HF_CPL_MASK; > + hflags = env->hflags & HFLAG_COPY_MASK; > + hflags |= (env->segs[R_SS].flags >> DESC_DPL_SHIFT) & HF_CPL_MASK; > hflags |= (env->cr[0] & CR0_PE_MASK) << (HF_PE_SHIFT - CR0_PE_SHIFT); > hflags |= (env->cr[0] << (HF_MP_SHIFT - CR0_MP_SHIFT)) & > (HF_MP_MASK | HF_EM_MASK | HF_TS_MASK); > hflags |= (env->eflags & (HF_TF_MASK | HF_VM_MASK | HF_IOPL_MASK)); > - hflags |= (env->cr[4] & CR4_OSFXSR_MASK) << > - (HF_OSFXSR_SHIFT - CR4_OSFXSR_SHIFT); > + > + if (env->cr[4] & CR4_OSFXSR_MASK) { > + hflags |= HF_OSFXSR_MASK; > + } > + if (env->cr[4] & CR4_OSXSAVE_MASK) { > + hflags |= HF_OSXSAVE_MASK; > + } > > if (env->efer & MSR_EFER_LMA) { > hflags |= HF_LMA_MASK; > @@ -1571,7 +1577,7 @@ static int kvm_get_sregs(X86CPU *cpu) > env->segs[R_SS].base) != 0) << HF_ADDSEG_SHIFT; > } > } > - env->hflags = (env->hflags & HFLAG_COPY_MASK) | hflags; > + env->hflags = hflags; > > return 0; > } These KVM bits look good. Paolo