[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86/hvm: Conditionally leave CPUID Faulting active in HVM context



On 16/01/17 11:17, Andrew Cooper wrote:
> If the hardware supports faulting, and the guest has chosen to use it, leave
> faulting active in HVM context.
>
> It is more efficient to have hardware convert CPUID to a #GP fault (which we
> don't intercept), than to take a VMExit and have Xen re-inject a #GP fault.
>
> Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
> ---
> CC: Jan Beulich <JBeulich@xxxxxxxx>
> CC: Jun Nakajima <jun.nakajima@xxxxxxxxx>
> CC: Kevin Tian <kevin.tian@xxxxxxxxx>

Ping VT-x ?

> ---
>  xen/arch/x86/cpu/intel.c   |  5 +++--
>  xen/arch/x86/hvm/vmx/vmx.c | 12 ++++++++++--
>  2 files changed, 13 insertions(+), 4 deletions(-)
>
> diff --git a/xen/arch/x86/cpu/intel.c b/xen/arch/x86/cpu/intel.c
> index 2e11662..d0e380c 100644
> --- a/xen/arch/x86/cpu/intel.c
> +++ b/xen/arch/x86/cpu/intel.c
> @@ -175,8 +175,9 @@ static void intel_ctxt_switch_levelling(const struct vcpu 
> *next)
>                * generating the maximum full cpuid policy into Xen, at which
>                * this problem will disappear.
>                */
> -             set_cpuid_faulting(nextd && is_pv_domain(nextd) &&
> -                                !is_control_domain(nextd));
> +             set_cpuid_faulting(nextd && !is_control_domain(nextd) &&
> +                                (is_pv_domain(nextd) ||
> +                                 next->arch.cpuid_faulting));
>               return;
>       }
>  
> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
> index 61925cf..19294cb 100644
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -2866,11 +2866,19 @@ static int vmx_msr_write_intercept(unsigned int msr, 
> uint64_t msr_content)
>          break;
>  
>      case MSR_INTEL_MISC_FEATURES_ENABLES:
> +    {
> +        bool old_cpuid_faulting = v->arch.cpuid_faulting;
> +
>          if ( msr_content & ~MSR_MISC_FEATURES_CPUID_FAULTING )
>              goto gp_fault;
> -        v->arch.cpuid_faulting =
> -            !!(msr_content & MSR_MISC_FEATURES_CPUID_FAULTING);
> +
> +        v->arch.cpuid_faulting = msr_content & 
> MSR_MISC_FEATURES_CPUID_FAULTING;
> +
> +        if ( cpu_has_cpuid_faulting &&
> +             (old_cpuid_faulting ^ v->arch.cpuid_faulting) )
> +            ctxt_switch_levelling(v);
>          break;
> +    }
>  
>      default:
>          if ( passive_domain_do_wrmsr(msr, msr_content) )


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.