|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] x86: MSR_IA32_BNDCFGS save/restore
On 13/12/2013 14:02, Jan Beulich wrote:
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -580,6 +580,55 @@ static int vmx_load_vmcs_ctxt(struct vcp
> return 0;
> }
>
> +static unsigned int __init vmx_init_msr(void)
> +{
> + return !!cpu_has_mpx;
> +}
> +
> +static void vmx_save_msr(struct vcpu *v, struct hvm_msr *ctxt)
> +{
> + vmx_vmcs_enter(v);
> +
> + if ( cpu_has_mpx )
> + {
> + __vmread(GUEST_BNDCFGS, &ctxt->msr[ctxt->count].val);
> + if ( ctxt->msr[ctxt->count].val )
> + ctxt->msr[ctxt->count++].index = MSR_IA32_BNDCFGS;
> + }
> +
> + vmx_vmcs_exit(v);
> +}
> +
> +static int vmx_load_msr(struct vcpu *v, struct hvm_msr *ctxt)
> +{
> + unsigned int i;
> + int err = 0;
> +
> + vmx_vmcs_enter(v);
> +
> + for ( i = 0; i < ctxt->count; ++i )
> + {
> + switch ( ctxt->msr[i].index )
> + {
> + case MSR_IA32_BNDCFGS:
> + if ( cpu_has_mpx )
> + __vmwrite(GUEST_BNDCFGS, ctxt->msr[i].val);
> + else
> + err = -ENXIO;
> + break;
> + default:
> + continue;
This will skip setting _rsvd for an MSR we don't recognise. Doesn't
this interfere with the error checking in the caller?
~Andrew
> + }
> + if ( err )
> + break;
> + ctxt->msr[i]._rsvd = 1;
> + }
> +
> + vmx_vmcs_exit(v);
> +
> + return err;
> +}
> +
> static void vmx_fpu_enter(struct vcpu *v)
> {
> vcpu_restore_fpu_lazy(v);
> @@ -1602,6 +1651,9 @@ static struct hvm_function_table __initd
> .vcpu_destroy = vmx_vcpu_destroy,
> .save_cpu_ctxt = vmx_save_vmcs_ctxt,
> .load_cpu_ctxt = vmx_load_vmcs_ctxt,
> + .init_msr = vmx_init_msr,
> + .save_msr = vmx_save_msr,
> + .load_msr = vmx_load_msr,
> .get_interrupt_shadow = vmx_get_interrupt_shadow,
> .set_interrupt_shadow = vmx_set_interrupt_shadow,
> .guest_x86_mode = vmx_guest_x86_mode,
> --- a/xen/include/asm-x86/hvm/vmx/vmcs.h
> +++ b/xen/include/asm-x86/hvm/vmx/vmcs.h
> @@ -367,6 +367,8 @@ enum vmcs_field {
> GUEST_PDPTR2_HIGH = 0x0000280f,
> GUEST_PDPTR3 = 0x00002810,
> GUEST_PDPTR3_HIGH = 0x00002811,
> + GUEST_BNDCFGS = 0x00002812,
> + GUEST_BNDCFGS_HIGH = 0x00002813,
> HOST_PAT = 0x00002c00,
> HOST_PAT_HIGH = 0x00002c01,
> HOST_EFER = 0x00002c02,
>
>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |