git: c54f01a0cbb0 - stable/12 - vmm: Cherry pick illumos commit '13361 bhyve should mask RDT cpuid info'

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Fri, 11 Nov 2022 02:01:29 UTC
The branch stable/12 has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=c54f01a0cbb00210f23bbe3196d48a9b611638f8

commit c54f01a0cbb00210f23bbe3196d48a9b611638f8
Author:     Vitaliy Gusev <gusev.vitaliy@gmail.com>
AuthorDate: 2022-06-30 17:27:27 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2022-11-11 01:49:05 +0000

    vmm: Cherry pick illumos commit '13361 bhyve should mask RDT cpuid info'
    
    Summary:
        commit  1a5f1879be09d3de900b2510692dd12003784d84
        Author: Patrick Mooney <pmooney@pfmooney.com>
        Date:   2020-12-16T20:02:23.000Z
    
            13361 bhyve should mask RDT cpuid info
            Reviewed by: Andy Fiddaman <andy@omnios.org>
            Reviewed by: Toomas Soome <tsoome@me.com>
            Approved by: Robert Mustacchi <rm@fingolfin.org>
    
        https://github.com/illumos/illumos-gate/commit/1a5f1879be09d3de900b2510692dd12003784d8
    
    ----
    
    We saw similar warning of GP (on Intel Xeon CPU E5-2630 v4 and VM with Ubuntu 20.04 5.4.0-113-generic)  until this commit is applied:
    
    ```
    [    1.658880] kernel: unchecked MSR access error: WRMSR to 0xc8f (tried to write 0x0000000000000000) at rIP: 0xffffffffacc735b4 (native_write_msr+0x4/0x30)
    [    1.662734] kernel: Call Trace:
    [    1.663885] kernel:  ? clear_closid_rmid.isra.0+0x36/0x40
    [    1.665501] kernel:  resctrl_online_cpu+0xdc/0x3f0
    [    1.666952] kernel:  ? __switch_to_asm+0x40/0x70
    [    1.668358] kernel:  ? __switch_to+0x7f/0x480
    [    1.669693] kernel:  ? cat_wrmsr+0x70/0x70
    [    1.670970] kernel:  cpuhp_invoke_callback+0x9b/0x580
    [    1.672541] kernel:  ? __schedule+0x2eb/0x740
    [    1.673893] kernel:  cpuhp_thread_fun+0xb8/0x120
    [    1.675304] kernel:  smpboot_thread_fn+0xd0/0x170
    [    1.676685] kernel:  kthread+0x104/0x140
    [    1.677948] kernel:  ? sort_range+0x30/0x30
    [    1.679299] kernel:  ? kthread_park+0x90/0x90
    [    1.680570] kernel:  ret_from_fork+0x35/0x40
    [    1.682000] kernel: *** VALIDATE rdt ***
    [    1.683454] kernel: resctrl: L3 monitoring detected
    ```
    
    Reviewed by:    markj, jhb
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D35442
    
    (cherry picked from commit 5afcca138f6b1f9d6413de586a0cf2baf16da764)
---
 sys/amd64/vmm/x86.c | 18 ++++++++++++++++++
 sys/amd64/vmm/x86.h |  2 ++
 2 files changed, 20 insertions(+)

diff --git a/sys/amd64/vmm/x86.c b/sys/amd64/vmm/x86.c
index a2cbdea6a470..8fe2c4e6c880 100644
--- a/sys/amd64/vmm/x86.c
+++ b/sys/amd64/vmm/x86.c
@@ -568,6 +568,24 @@ x86_emulate_cpuid(struct vm *vm, int vcpu_id,
 			}
 			break;
 
+		case CPUID_0000_000F:
+		case CPUID_0000_0010:
+			/*
+			 * Do not report any Resource Director Technology
+			 * capabilities.  Exposing control of cache or memory
+			 * controller resource partitioning to the guest is not
+			 * at all sensible.
+			 *
+			 * This is already hidden at a high level by masking of
+			 * leaf 0x7.  Even still, a guest may look here for
+			 * detailed capability information.
+			 */
+			regs[0] = 0;
+			regs[1] = 0;
+			regs[2] = 0;
+			regs[3] = 0;
+			break;
+
 		case CPUID_0000_0015:
 			/*
 			 * Don't report CPU TSC/Crystal ratio and clock
diff --git a/sys/amd64/vmm/x86.h b/sys/amd64/vmm/x86.h
index 46a44df2f0ca..390aedde50e9 100644
--- a/sys/amd64/vmm/x86.h
+++ b/sys/amd64/vmm/x86.h
@@ -41,6 +41,8 @@
 #define	CPUID_0000_000A	(0xA)
 #define	CPUID_0000_000B	(0xB)
 #define	CPUID_0000_000D	(0xD)
+#define	CPUID_0000_000F	(0xF)
+#define	CPUID_0000_0010	(0x10)
 #define	CPUID_0000_0015	(0x15)
 #define CPUID_8000_0000	(0x80000000)
 #define CPUID_8000_0001	(0x80000001)