From: Jan Beulich Date: Mon, 9 Jul 2018 08:51:02 +0000 (+0200) Subject: x86: correctly set nonlazy_xstate_used when loading full state X-Git-Tag: archive/raspbian/4.14.0+80-gd101b417b7-1+rpi1^2~63^2~3664 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f46bf0e101ca63118b9db2616e8f51e972d7f563;p=xen.git x86: correctly set nonlazy_xstate_used when loading full state In this case, just like xcr0_accum, nonlazy_xstate_used should always be set to the intended new value, rather than possibly leaving the flag set from a prior state load. Signed-off-by: Jan Beulich Reviewed-by: Wei Liu Acked-by: Andrew Cooper --- diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 3e9580bcf7..b9736291b7 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1194,8 +1194,7 @@ long arch_do_domctl( vcpu_pause(v); v->arch.xcr0 = _xcr0; v->arch.xcr0_accum = _xcr0_accum; - if ( _xcr0_accum & XSTATE_NONLAZY ) - v->arch.nonlazy_xstate_used = 1; + v->arch.nonlazy_xstate_used = _xcr0_accum & XSTATE_NONLAZY; compress_xsave_states(v, _xsave_area, evc->size - PV_XSAVE_HDR_SIZE); vcpu_unpause(v); diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c index c23983cdff..279cb88e45 100644 --- a/xen/arch/x86/hvm/hvm.c +++ b/xen/arch/x86/hvm/hvm.c @@ -1324,8 +1324,7 @@ static int hvm_load_cpu_xsave_states(struct domain *d, hvm_domain_context_t *h) v->arch.xcr0 = ctxt->xcr0; v->arch.xcr0_accum = ctxt->xcr0_accum; - if ( ctxt->xcr0_accum & XSTATE_NONLAZY ) - v->arch.nonlazy_xstate_used = 1; + v->arch.nonlazy_xstate_used = ctxt->xcr0_accum & XSTATE_NONLAZY; compress_xsave_states(v, &ctxt->save_area, size - offsetof(struct hvm_hw_cpu_xsave, save_area));