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

RE: [PATCH v4 2/5] x86/pv: allow reading FEATURE_CONTROL MSR


  • To: Roger Pau Monne <roger.pau@xxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: "Tian, Kevin" <kevin.tian@xxxxxxxxx>
  • Date: Tue, 15 Sep 2020 02:48:55 +0000
  • Accept-language: en-US
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Af4MwQxOKQFqd3vJ2FreeIVgHU3WO79a5tT8UH+mDis=; b=YOb+myERVkzq29r8lgOCu69KaZnkC6nyVt720mCxwKipUN8rCaftvi/bfFUSuA2xgcAyPTcA8Hw4DurzyAw/MtyHTu4rmEr4nGeRQ/vvisiV/U+QwMY64+wt0quFnfBzls8NOssXrzAgEs8dK/TeBovmBltIsG1MogLEDE1QZsWl3e2s2t5EUEApz0NikNzacKdV48P2DGtXFlhC9EbFDpn6/E+fBA/yhYDMvDGn7FEv6yeYN+O4UOqIruL4ygyf3P0g218W0wzd8B5DmRY5zlY+LD9UAf4MHrq8EIVZmuk17udZ4e9oKC7XKNSiygqDIxyl6MDHBpHWyV9oY5oYUA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KoPfdAKEoAKchctMvyPKDrsGXYnHuaGE/QtNQ+KrcRGvCNXUOWlCnAXOT+3jE6Ve6aCvJ2qdrJ2fHIC5iprhAz4cj+g25YluXQWE8PF6nfX4cKy7yJd+mMCfFJ2TLwTblo3jiv0VXqbuF4Lt385IuTxUYhZCWr5cieydvGzm0UhbcHIcc87SBdf7APUWlkqgc7tnlnvheLyXs1xtNHrcUzZ7F35cJWwoFP5P3Akv/AKuAZ34gaRMB3nj4RwDYrXJMB4kZ5Yn/kx87NhhuTrUYLas9plwagXNuXeVevVvNZZbfnclE1zqs/B27NkIgNiJVQVAfAJmv1bKDz2MYxXdIA==
  • Authentication-results: citrix.com; dkim=none (message not signed) header.d=none;citrix.com; dmarc=none action=none header.from=intel.com;
  • Cc: "Nakajima, Jun" <jun.nakajima@xxxxxxxxx>, Jan Beulich <jbeulich@xxxxxxxx>, Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
  • Delivery-date: Tue, 15 Sep 2020 02:49:10 +0000
  • Dlp-product: dlpe-windows
  • Dlp-reaction: no-action
  • Dlp-version: 11.5.1.3
  • Ironport-sdr: smVzeVty7+l0xDySK+0XrcaGGq3eyyw2hJAYSZ6LOWZ5KREuMzyDK++1Okl1uurQBzmELuXK4J Mz9XxrZ1NL7A==
  • Ironport-sdr: /gvkvPtS0LalJyPsSsQQum0XbfxvgKvcZyJJgP0FqA/4oYAewI9z61wVkVAWXKYNwYiMA7FCJ+ YUlhLf06Qhrg==
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Thread-index: AQHWhQI6PgNgtPlHxUa6q1fKXIwAlalpC0vQ
  • Thread-topic: [PATCH v4 2/5] x86/pv: allow reading FEATURE_CONTROL MSR

> From: Roger Pau Monne <roger.pau@xxxxxxxxxx>
> Sent: Monday, September 7, 2020 6:32 PM
> 
> Linux PV guests will attempt to read the FEATURE_CONTROL MSR, so move
> the handling done in VMX code into guest_rdmsr as it can be shared
> between PV and HVM guests that way.
> 
> Note that there's a slight behavior change and attempting to read the
> MSR when no features are available will result in a fault.
> 
> Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>

Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>

> ---
> Changes since v3:
>  - Only allow reading the MSR when there are bits available (different
>    than bit 0).
> 
> Changes from v1:
>  - Move the VMX implementation into guest_rdmsr.
> ---
>  xen/arch/x86/hvm/vmx/vmx.c |  8 +-------
>  xen/arch/x86/msr.c         | 12 ++++++++++++
>  2 files changed, 13 insertions(+), 7 deletions(-)
> 
> diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
> index c4b40bf3cb..709ea149d1 100644
> --- a/xen/arch/x86/hvm/vmx/vmx.c
> +++ b/xen/arch/x86/hvm/vmx/vmx.c
> @@ -2980,13 +2980,7 @@ static int vmx_msr_read_intercept(unsigned int
> msr, uint64_t *msr_content)
>      case MSR_IA32_DEBUGCTLMSR:
>          __vmread(GUEST_IA32_DEBUGCTL, msr_content);
>          break;
> -    case MSR_IA32_FEATURE_CONTROL:
> -        *msr_content = IA32_FEATURE_CONTROL_LOCK;
> -        if ( vmce_has_lmce(curr) )
> -            *msr_content |= IA32_FEATURE_CONTROL_LMCE_ON;
> -        if ( nestedhvm_enabled(curr->domain) )
> -            *msr_content |=
> IA32_FEATURE_CONTROL_ENABLE_VMXON_OUTSIDE_SMX;
> -        break;
> +
>      case MSR_IA32_VMX_BASIC...MSR_IA32_VMX_VMFUNC:
>          if ( !nvmx_msr_read_intercept(msr, msr_content) )
>              goto gp_fault;
> diff --git a/xen/arch/x86/msr.c b/xen/arch/x86/msr.c
> index 74bf7d9589..79fbb9e940 100644
> --- a/xen/arch/x86/msr.c
> +++ b/xen/arch/x86/msr.c
> @@ -25,6 +25,7 @@
>  #include <xen/sched.h>
> 
>  #include <asm/debugreg.h>
> +#include <asm/hvm/nestedhvm.h>
>  #include <asm/hvm/viridian.h>
>  #include <asm/msr.h>
>  #include <asm/setup.h>
> @@ -197,6 +198,17 @@ int guest_rdmsr(struct vcpu *v, uint32_t msr,
> uint64_t *val)
>          /* Not offered to guests. */
>          goto gp_fault;
> 
> +    case MSR_IA32_FEATURE_CONTROL:
> +        if ( !cp->basic.vmx && !vmce_has_lmce(v) )
> +            goto gp_fault;
> +
> +        *val = IA32_FEATURE_CONTROL_LOCK;
> +        if ( vmce_has_lmce(v) )
> +            *val |= IA32_FEATURE_CONTROL_LMCE_ON;
> +        if ( cp->basic.vmx )
> +            *val |= IA32_FEATURE_CONTROL_ENABLE_VMXON_OUTSIDE_SMX;
> +        break;
> +
>      case MSR_IA32_PLATFORM_ID:
>          if ( !(cp->x86_vendor & X86_VENDOR_INTEL) ||
>               !(boot_cpu_data.x86_vendor & X86_VENDOR_INTEL) )
> --
> 2.28.0


 


Rackspace

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