[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen stable-4.9] x86/migrate: Move MSR_SPEC_CTRL on migrate
commit 2fdee60ec12c238358bff209378c7d91e4817fa7 Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Thu Feb 8 12:27:18 2018 +0100 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Thu Feb 8 12:27:18 2018 +0100 x86/migrate: Move MSR_SPEC_CTRL on migrate Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Wei Liu <wei.liu2@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> master commit: 0cf2a4eb769302b7d7d7835540e7b2f15006df30 master date: 2018-01-26 14:10:21 +0000 --- xen/arch/x86/domctl.c | 27 +++++++++++++++++++++++++++ xen/arch/x86/hvm/vmx/vmx.c | 20 ++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/xen/arch/x86/domctl.c b/xen/arch/x86/domctl.c index 0aa7dae..77308d1 100644 --- a/xen/arch/x86/domctl.c +++ b/xen/arch/x86/domctl.c @@ -1338,6 +1338,19 @@ long arch_do_domctl( ++i; } + if ( d->arch.cpuid->feat.ibrsb && v->arch.spec_ctrl ) + { + if ( i < vmsrs->msr_count && !ret ) + { + msr.index = MSR_SPEC_CTRL; + msr.reserved = 0; + msr.value = v->arch.spec_ctrl; + if ( copy_to_guest_offset(vmsrs->msrs, i, &msr, 1) ) + ret = -EFAULT; + } + ++i; + } + vcpu_unpause(v); if ( i > vmsrs->msr_count && !ret ) @@ -1365,6 +1378,20 @@ long arch_do_domctl( switch ( msr.index ) { + case MSR_SPEC_CTRL: + if ( !d->arch.cpuid->feat.ibrsb ) + break; /* MSR available? */ + + /* + * Note: SPEC_CTRL_STIBP is specified as safe to use (i.e. + * ignored) when STIBP isn't enumerated in hardware. + */ + + if ( msr.value & ~(SPEC_CTRL_IBRS | SPEC_CTRL_STIBP) ) + break; + v->arch.spec_ctrl = msr.value; + continue; + case MSR_INTEL_MISC_FEATURES_ENABLES: v->arch.cpuid_faulting = !!(msr.value & MSR_MISC_FEATURES_CPUID_FAULTING); diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index c5cf72c..d31139f 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -898,6 +898,7 @@ static int vmx_load_vmcs_ctxt(struct vcpu *v, struct hvm_hw_cpu *ctxt) static unsigned int __init vmx_init_msr(void) { return 1 /* MISC_FEATURES_ENABLES */ + + !!boot_cpu_has(X86_FEATURE_IBRSB) + (cpu_has_mpx && cpu_has_vmx_mpx) + (cpu_has_xsaves && cpu_has_vmx_xsaves); } @@ -912,6 +913,12 @@ static void vmx_save_msr(struct vcpu *v, struct hvm_msr *ctxt) ctxt->msr[ctxt->count++].val = MSR_MISC_FEATURES_CPUID_FAULTING; } + if ( v->domain->arch.cpuid->feat.ibrsb && v->arch.spec_ctrl ) + { + ctxt->msr[ctxt->count].index = MSR_SPEC_CTRL; + ctxt->msr[ctxt->count++].val = v->arch.spec_ctrl; + } + if ( cpu_has_mpx && cpu_has_vmx_mpx ) { __vmread(GUEST_BNDCFGS, &ctxt->msr[ctxt->count].val); @@ -940,6 +947,19 @@ static int vmx_load_msr(struct vcpu *v, struct hvm_msr *ctxt) { switch ( ctxt->msr[i].index ) { + case MSR_SPEC_CTRL: + if ( !v->domain->arch.cpuid->feat.ibrsb ) + err = -ENXIO; /* MSR available? */ + /* + * Note: SPEC_CTRL_STIBP is specified as safe to use (i.e. + * ignored) when STIBP isn't enumerated in hardware. + */ + else if ( ctxt->msr[i].val & + ~(SPEC_CTRL_IBRS | SPEC_CTRL_STIBP) ) + err = -ENXIO; + else + v->arch.spec_ctrl = ctxt->msr[i].val; + break; case MSR_INTEL_MISC_FEATURES_ENABLES: v->arch.cpuid_faulting = !!(ctxt->msr[i].val & MSR_MISC_FEATURES_CPUID_FAULTING); -- generated by git-patchbot for /home/xen/git/xen.git#stable-4.9 _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |