99 lines
4.0 KiB
Diff
99 lines
4.0 KiB
Diff
|
|
From bb5ec050bb8144c464cfe1b0954230ea2d5b4803 Mon Sep 17 00:00:00 2001
|
|||
|
|
From: Babu Moger <babu.moger@amd.com>
|
|||
|
|
Date: Thu, 4 May 2023 15:53:11 -0500
|
|||
|
|
Subject: [PATCH] target/i386: Add VNMI and automatic IBRS feature bits
|
|||
|
|
MIME-Version: 1.0
|
|||
|
|
Content-Type: text/plain; charset=UTF-8
|
|||
|
|
Content-Transfer-Encoding: 8bit
|
|||
|
|
|
|||
|
|
mainline inclusion
|
|||
|
|
from mainline-8.1.0
|
|||
|
|
commit 62a798d4bc2c3e767d94670776c77a7df274d7c5
|
|||
|
|
category: feature
|
|||
|
|
bugzilla: https://gitee.com/openeuler/qemu/issues/IAUSKJ
|
|||
|
|
Reference: https://gitlab.com/qemu-project/qemu/-/commit/62a798d4bc2c3e767d94670776c77a7df274d7c5
|
|||
|
|
|
|||
|
|
commit 62a798d4bc2c3e767d94670776c77a7df274d7c5 upstream
|
|||
|
|
|
|||
|
|
Add the following featute bits.
|
|||
|
|
|
|||
|
|
vnmi: Virtual NMI (VNMI) allows the hypervisor to inject the NMI into the
|
|||
|
|
guest without using Event Injection mechanism meaning not required to
|
|||
|
|
track the guest NMI and intercepting the IRET.
|
|||
|
|
The presence of this feature is indicated via the CPUID function
|
|||
|
|
0x8000000A_EDX[25].
|
|||
|
|
|
|||
|
|
automatic-ibrs :
|
|||
|
|
The AMD Zen4 core supports a new feature called Automatic IBRS.
|
|||
|
|
It is a "set-and-forget" feature that means that, unlike e.g.,
|
|||
|
|
s/w-toggled SPEC_CTRL.IBRS, h/w manages its IBRS mitigation
|
|||
|
|
resources automatically across CPL transitions.
|
|||
|
|
The presence of this feature is indicated via the CPUID function
|
|||
|
|
0x80000021_EAX[8].
|
|||
|
|
|
|||
|
|
The documention for the features are available in the links below.
|
|||
|
|
a. Processor Programming Reference (PPR) for AMD Family 19h Model 01h,
|
|||
|
|
Revision B1 Processors
|
|||
|
|
b. AMD64 Architecture Programmer’s Manual Volumes 1–5 Publication No. Revision
|
|||
|
|
40332 4.05 Date October 2022
|
|||
|
|
|
|||
|
|
Signed-off-by: Santosh Shukla <santosh.shukla@amd.com>
|
|||
|
|
Signed-off-by: Kim Phillips <kim.phillips@amd.com>
|
|||
|
|
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
|||
|
|
Link: https://www.amd.com/system/files/TechDocs/55898_B1_pub_0.50.zip
|
|||
|
|
Link: https://www.amd.com/system/files/TechDocs/40332_4.05.pdf
|
|||
|
|
Message-Id: <20230504205313.225073-7-babu.moger@amd.com>
|
|||
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|||
|
|
(cherry picked from commit 62a798d4bc2c3e767d94670776c77a7df274d7c5)
|
|||
|
|
---
|
|||
|
|
target/i386/cpu.c | 4 ++--
|
|||
|
|
target/i386/cpu.h | 3 +++
|
|||
|
|
2 files changed, 5 insertions(+), 2 deletions(-)
|
|||
|
|
|
|||
|
|
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
|||
|
|
index 4d7f948eb1..59b585b0d0 100644
|
|||
|
|
--- a/target/i386/cpu.c
|
|||
|
|
+++ b/target/i386/cpu.c
|
|||
|
|
@@ -806,7 +806,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
|||
|
|
"pfthreshold", "avic", NULL, "v-vmsave-vmload",
|
|||
|
|
"vgif", NULL, NULL, NULL,
|
|||
|
|
NULL, NULL, NULL, NULL,
|
|||
|
|
- NULL, NULL, NULL, NULL,
|
|||
|
|
+ NULL, "vnmi", NULL, NULL,
|
|||
|
|
"svme-addr-chk", NULL, NULL, NULL,
|
|||
|
|
},
|
|||
|
|
.cpuid = { .eax = 0x8000000A, .reg = R_EDX, },
|
|||
|
|
@@ -963,7 +963,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
|||
|
|
.feat_names = {
|
|||
|
|
"no-nested-data-bp", NULL, "lfence-always-serializing", NULL,
|
|||
|
|
NULL, NULL, "null-sel-clr-base", NULL,
|
|||
|
|
- NULL, NULL, NULL, NULL,
|
|||
|
|
+ "auto-ibrs", NULL, NULL, NULL,
|
|||
|
|
NULL, NULL, NULL, NULL,
|
|||
|
|
NULL, NULL, NULL, NULL,
|
|||
|
|
NULL, NULL, NULL, NULL,
|
|||
|
|
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
|
|||
|
|
index 7b1190c3f2..84910db8bb 100644
|
|||
|
|
--- a/target/i386/cpu.h
|
|||
|
|
+++ b/target/i386/cpu.h
|
|||
|
|
@@ -760,6 +760,7 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
|||
|
|
#define CPUID_SVM_AVIC (1U << 13)
|
|||
|
|
#define CPUID_SVM_V_VMSAVE_VMLOAD (1U << 15)
|
|||
|
|
#define CPUID_SVM_VGIF (1U << 16)
|
|||
|
|
+#define CPUID_SVM_VNMI (1U << 25)
|
|||
|
|
#define CPUID_SVM_SVME_ADDR_CHK (1U << 28)
|
|||
|
|
|
|||
|
|
/* Support RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE */
|
|||
|
|
@@ -948,6 +949,8 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
|||
|
|
#define CPUID_8000_0021_EAX_LFENCE_ALWAYS_SERIALIZING (1U << 2)
|
|||
|
|
/* Null Selector Clears Base */
|
|||
|
|
#define CPUID_8000_0021_EAX_NULL_SEL_CLR_BASE (1U << 6)
|
|||
|
|
+/* Automatic IBRS */
|
|||
|
|
+#define CPUID_8000_0021_EAX_AUTO_IBRS (1U << 8)
|
|||
|
|
|
|||
|
|
#define CPUID_XSAVE_XSAVEOPT (1U << 0)
|
|||
|
|
#define CPUID_XSAVE_XSAVEC (1U << 1)
|
|||
|
|
--
|
|||
|
|
2.45.1.windows.1
|
|||
|
|
|