|
[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 |