x86/msr: Virtualise MSR_PLATFORM_ID properly
diff mbox series

Message ID 20200214195510.22667-1-andrew.cooper3@citrix.com
State New
Headers show
Series
  • x86/msr: Virtualise MSR_PLATFORM_ID properly
Related show

Commit Message

Andrew Cooper Feb. 14, 2020, 7:55 p.m. UTC
This is an Intel-only, read-only MSR related to microcode loading.  Expose it
in similar circumstances as the PATCHLEVEL MSR.

This should have been alongside c/s 013896cb8b2 "x86/msr: Fix handling of
MSR_AMD_PATCHLEVEL/MSR_IA32_UCODE_REV"

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wl@xen.org>
CC: Roger Pau Monné <roger.pau@citrix.com>

Turns out I wrote this nearly a year ago and didn't send it.  It obviously got
dropped in the leadup to MDS.
---
 xen/arch/x86/msr.c | 8 ++++++++
 1 file changed, 8 insertions(+)

Comments

Jan Beulich Feb. 18, 2020, 1:28 p.m. UTC | #1
On 14.02.2020 20:55, Andrew Cooper wrote:
> This is an Intel-only, read-only MSR related to microcode loading.  Expose it
> in similar circumstances as the PATCHLEVEL MSR.
> 
> This should have been alongside c/s 013896cb8b2 "x86/msr: Fix handling of
> MSR_AMD_PATCHLEVEL/MSR_IA32_UCODE_REV"
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Reviewed-by: Jan Beulich <jbeulich@suse.com>
Jan Beulich Feb. 28, 2020, 9:11 a.m. UTC | #2
On 14.02.2020 20:55, Andrew Cooper wrote:
> --- a/xen/arch/x86/msr.c
> +++ b/xen/arch/x86/msr.c
> @@ -143,6 +143,13 @@ int guest_rdmsr(struct vcpu *v, uint32_t msr, uint64_t *val)
>          /* Not offered to guests. */
>          goto gp_fault;
>  
> +    case MSR_IA32_PLATFORM_ID:
> +        if ( !(cp->x86_vendor & X86_VENDOR_INTEL) ||
> +             !(boot_cpu_data.x86_vendor & X86_VENDOR_INTEL) )

This has turned out to be an unfortunate trap for backporting.
While I understand using & here is the more modern form, could
we perhaps settle on using == / != where possible (i.e. just a
single vendor checked) until 4.12 has gone out of at least
regular support? (The prevailing use with more than one vendor
is with AMD and Hygon, which doesn't go silent as
X86_VENDOR_HYGON doesn't exist yet in 4.12.)

Jan

Patch
diff mbox series

diff --git a/xen/arch/x86/msr.c b/xen/arch/x86/msr.c
index 785574de67..1cea777680 100644
--- a/xen/arch/x86/msr.c
+++ b/xen/arch/x86/msr.c
@@ -143,6 +143,13 @@  int guest_rdmsr(struct vcpu *v, uint32_t msr, uint64_t *val)
         /* Not offered to guests. */
         goto gp_fault;
 
+    case MSR_IA32_PLATFORM_ID:
+        if ( !(cp->x86_vendor & X86_VENDOR_INTEL) ||
+             !(boot_cpu_data.x86_vendor & X86_VENDOR_INTEL) )
+            goto gp_fault;
+        rdmsrl(MSR_IA32_PLATFORM_ID, *val);
+        break;
+
     case MSR_AMD_PATCHLEVEL:
         BUILD_BUG_ON(MSR_IA32_UCODE_REV != MSR_AMD_PATCHLEVEL);
         /*
@@ -275,6 +282,7 @@  int guest_wrmsr(struct vcpu *v, uint32_t msr, uint64_t val)
     {
         uint64_t rsvd;
 
+    case MSR_IA32_PLATFORM_ID:
     case MSR_INTEL_CORE_THREAD_COUNT:
     case MSR_INTEL_PLATFORM_INFO:
     case MSR_ARCH_CAPABILITIES: