[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/46] x86/cpu: Populate SVM CPUID feature bits
From: |
Paolo Bonzini |
Subject: |
[PULL 12/46] x86/cpu: Populate SVM CPUID feature bits |
Date: |
Mon, 8 Feb 2021 19:22:57 +0100 |
From: Wei Huang <wei.huang2@amd.com>
Newer AMD CPUs will add CPUID_0x8000000A_EDX[28] bit, which indicates
that SVM instructions (VMRUN/VMSAVE/VMLOAD) will trigger #VMEXIT before
CPU checking their EAX against reserved memory regions. This change will
allow the hypervisor to avoid intercepting #GP and emulating SVM
instructions. KVM turns on this CPUID bit for nested VMs. In order to
support it, let us populate this bit, along with other SVM feature bits,
in FEAT_SVM.
Signed-off-by: Wei Huang <wei.huang2@amd.com>
Message-Id: <20210126202456.589932-1-wei.huang2@amd.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
target/i386/cpu.c | 6 +++---
target/i386/cpu.h | 24 ++++++++++++++----------
2 files changed, 17 insertions(+), 13 deletions(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index e775e9abb5..ff25ad6f6c 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -926,11 +926,11 @@ static FeatureWordInfo feature_word_info[FEATURE_WORDS] =
{
"npt", "lbrv", "svm-lock", "nrip-save",
"tsc-scale", "vmcb-clean", "flushbyasid", "decodeassists",
NULL, NULL, "pause-filter", NULL,
- "pfthreshold", NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
- NULL, NULL, NULL, NULL,
+ "pfthreshold", "avic", NULL, "v-vmsave-vmload",
+ "vgif", NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
+ "svme-addr-chk", NULL, NULL, NULL,
},
.cpuid = { .eax = 0x8000000A, .reg = R_EDX, },
.tcg_features = TCG_SVM_FEATURES,
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index d23a5b340a..b39ec505de 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -670,16 +670,20 @@ typedef uint64_t FeatureWordArray[FEATURE_WORDS];
#define CPUID_EXT3_PERFCORE (1U << 23)
#define CPUID_EXT3_PERFNB (1U << 24)
-#define CPUID_SVM_NPT (1U << 0)
-#define CPUID_SVM_LBRV (1U << 1)
-#define CPUID_SVM_SVMLOCK (1U << 2)
-#define CPUID_SVM_NRIPSAVE (1U << 3)
-#define CPUID_SVM_TSCSCALE (1U << 4)
-#define CPUID_SVM_VMCBCLEAN (1U << 5)
-#define CPUID_SVM_FLUSHASID (1U << 6)
-#define CPUID_SVM_DECODEASSIST (1U << 7)
-#define CPUID_SVM_PAUSEFILTER (1U << 10)
-#define CPUID_SVM_PFTHRESHOLD (1U << 12)
+#define CPUID_SVM_NPT (1U << 0)
+#define CPUID_SVM_LBRV (1U << 1)
+#define CPUID_SVM_SVMLOCK (1U << 2)
+#define CPUID_SVM_NRIPSAVE (1U << 3)
+#define CPUID_SVM_TSCSCALE (1U << 4)
+#define CPUID_SVM_VMCBCLEAN (1U << 5)
+#define CPUID_SVM_FLUSHASID (1U << 6)
+#define CPUID_SVM_DECODEASSIST (1U << 7)
+#define CPUID_SVM_PAUSEFILTER (1U << 10)
+#define CPUID_SVM_PFTHRESHOLD (1U << 12)
+#define CPUID_SVM_AVIC (1U << 13)
+#define CPUID_SVM_V_VMSAVE_VMLOAD (1U << 15)
+#define CPUID_SVM_VGIF (1U << 16)
+#define CPUID_SVM_SVME_ADDR_CHK (1U << 28)
/* Support RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE */
#define CPUID_7_0_EBX_FSGSBASE (1U << 0)
--
2.29.2
- [PULL 02/46] fuzz: refine the ide/ahci fuzzer configs, (continued)
- [PULL 02/46] fuzz: refine the ide/ahci fuzzer configs, Paolo Bonzini, 2021/02/08
- [PULL 08/46] target/i386: do not set LM for 32-bit emulation "-cpu host/max", Paolo Bonzini, 2021/02/08
- [PULL 07/46] fuzz: add virtio-9p configurations for fuzzing, Paolo Bonzini, 2021/02/08
- [PULL 01/46] fuzz: ignore address_space_map is_write flag, Paolo Bonzini, 2021/02/08
- [PULL 13/46] fuzz: fix wrong index in clear_bits, Paolo Bonzini, 2021/02/08
- [PULL 09/46] machine: add missing doc for memory-backend option, Paolo Bonzini, 2021/02/08
- [PULL 14/46] docs: don't install corresponding man page if guest agent is disabled, Paolo Bonzini, 2021/02/08
- [PULL 11/46] meson: honor --enable-rbd if cc.links test fails, Paolo Bonzini, 2021/02/08
- [PULL 16/46] event_notifier: handle initialization failure better, Paolo Bonzini, 2021/02/08
- [PULL 10/46] meson: accept either shared or static libraries if --disable-static, Paolo Bonzini, 2021/02/08
- [PULL 12/46] x86/cpu: Populate SVM CPUID feature bits,
Paolo Bonzini <=
- [PULL 15/46] virtio-scsi: don't uninitialize queues that we didn't initialize, Paolo Bonzini, 2021/02/08
- [PULL 17/46] target/i386: Fix decoding of certain BMI instructions, Paolo Bonzini, 2021/02/08
- [PULL 20/46] meson: Explicit TCG backend used, Paolo Bonzini, 2021/02/08
- [PULL 18/46] target/i86: implement PKS, Paolo Bonzini, 2021/02/08
- [PULL 19/46] configure: Improve TCI feature description, Paolo Bonzini, 2021/02/08
- [PULL 21/46] meson: Warn when TCI is selected but TCG backend is available, Paolo Bonzini, 2021/02/08
- [PULL 22/46] tests/meson: Only build softfloat objects if TCG is selected, Paolo Bonzini, 2021/02/08
- [PULL 23/46] pc-bios/meson: Only install EDK2 blob firmwares with system emulation, Paolo Bonzini, 2021/02/08
- [PULL 24/46] meson: Restrict block subsystem processing, Paolo Bonzini, 2021/02/08
- [PULL 29/46] qapi/meson: Remove QMP from user-mode emulation, Paolo Bonzini, 2021/02/08