* Mon Aug 21 2023 Miroslav Rezanina <mrezanin@redhat.com> - 8.0.0-12
- kvm-target-i386-allow-versioned-CPUs-to-specify-new-cach.patch [bz#2094913] - kvm-target-i386-Add-new-EPYC-CPU-versions-with-updated-c.patch [bz#2094913] - kvm-target-i386-Add-a-couple-of-feature-bits-in-8000_000.patch [bz#2094913] - kvm-target-i386-Add-feature-bits-for-CPUID_Fn80000021_EA.patch [bz#2094913] - kvm-target-i386-Add-missing-feature-bits-in-EPYC-Milan-m.patch [bz#2094913] - kvm-target-i386-Add-VNMI-and-automatic-IBRS-feature-bits.patch [bz#2094913] - kvm-target-i386-Add-EPYC-Genoa-model-to-support-Zen-4-pr.patch [bz#2094913] - Resolves: bz#2094913 (Add EPYC-Genoa CPU model in qemu)
This commit is contained in:
parent
330a18fc02
commit
a586acaa36
203
kvm-target-i386-Add-EPYC-Genoa-model-to-support-Zen-4-pr.patch
Normal file
203
kvm-target-i386-Add-EPYC-Genoa-model-to-support-Zen-4-pr.patch
Normal file
@ -0,0 +1,203 @@
|
||||
From 03011d00cfb5862edb7394a9b79b269198af5c89 Mon Sep 17 00:00:00 2001
|
||||
From: Bandan Das <bsd@redhat.com>
|
||||
Date: Wed, 9 Aug 2023 12:48:34 -0400
|
||||
Subject: [PATCH 7/7] target/i386: Add EPYC-Genoa model to support Zen 4
|
||||
processor series
|
||||
|
||||
RH-Author: Bandan Das <None>
|
||||
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
||||
RH-Bugzilla: 2094913
|
||||
RH-Acked-by: Wei Huang <None>
|
||||
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
RH-Commit: [7/7] 158091c691169a5d30c7c8005371ee7a0d9fc4ce (bdas1/qemu-kvm)
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
||||
|
||||
commit 166b1741884dd4fd7090b753cd7333868457a29b
|
||||
Author: Babu Moger <babu.moger@amd.com>
|
||||
Date: Thu May 4 15:53:12 2023 -0500
|
||||
|
||||
target/i386: Add EPYC-Genoa model to support Zen 4 processor series
|
||||
|
||||
Adds the support for AMD EPYC Genoa generation processors. The model
|
||||
display for the new processor will be EPYC-Genoa.
|
||||
|
||||
Adds the following new feature bits on top of the feature bits from
|
||||
the previous generation EPYC models.
|
||||
|
||||
avx512f : AVX-512 Foundation instruction
|
||||
avx512dq : AVX-512 Doubleword & Quadword Instruction
|
||||
avx512ifma : AVX-512 Integer Fused Multiply Add instruction
|
||||
avx512cd : AVX-512 Conflict Detection instruction
|
||||
avx512bw : AVX-512 Byte and Word Instructions
|
||||
avx512vl : AVX-512 Vector Length Extension Instructions
|
||||
avx512vbmi : AVX-512 Vector Byte Manipulation Instruction
|
||||
avx512_vbmi2 : AVX-512 Additional Vector Byte Manipulation Instruction
|
||||
gfni : AVX-512 Galois Field New Instructions
|
||||
avx512_vnni : AVX-512 Vector Neural Network Instructions
|
||||
avx512_bitalg : AVX-512 Bit Algorithms, add bit algorithms Instructions
|
||||
avx512_vpopcntdq: AVX-512 AVX-512 Vector Population Count Doubleword and
|
||||
Quadword Instructions
|
||||
avx512_bf16 : AVX-512 BFLOAT16 instructions
|
||||
la57 : 57-bit virtual address support (5-level Page Tables)
|
||||
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.
|
||||
auto-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.
|
||||
|
||||
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
||||
Message-Id: <20230504205313.225073-8-babu.moger@amd.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
||||
Signed-off-by: Bandan Das <bsd@redhat.com>
|
||||
---
|
||||
target/i386/cpu.c | 122 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 122 insertions(+)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index f1baefe775..b27db050a2 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -1973,6 +1973,56 @@ static const CPUCaches epyc_milan_v2_cache_info = {
|
||||
},
|
||||
};
|
||||
|
||||
+static const CPUCaches epyc_genoa_cache_info = {
|
||||
+ .l1d_cache = &(CPUCacheInfo) {
|
||||
+ .type = DATA_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 32 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 64,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l1i_cache = &(CPUCacheInfo) {
|
||||
+ .type = INSTRUCTION_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 32 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 64,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l2_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 2,
|
||||
+ .size = 1 * MiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 2048,
|
||||
+ .lines_per_tag = 1,
|
||||
+ },
|
||||
+ .l3_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 3,
|
||||
+ .size = 32 * MiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 16,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 32768,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = true,
|
||||
+ .inclusive = true,
|
||||
+ .complex_indexing = false,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
/* The following VMX features are not supported by KVM and are left out in the
|
||||
* CPU definitions:
|
||||
*
|
||||
@@ -4493,6 +4543,78 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
||||
{ /* end of list */ }
|
||||
}
|
||||
},
|
||||
+ {
|
||||
+ .name = "EPYC-Genoa",
|
||||
+ .level = 0xd,
|
||||
+ .vendor = CPUID_VENDOR_AMD,
|
||||
+ .family = 25,
|
||||
+ .model = 17,
|
||||
+ .stepping = 0,
|
||||
+ .features[FEAT_1_EDX] =
|
||||
+ CPUID_SSE2 | CPUID_SSE | CPUID_FXSR | CPUID_MMX | CPUID_CLFLUSH |
|
||||
+ CPUID_PSE36 | CPUID_PAT | CPUID_CMOV | CPUID_MCA | CPUID_PGE |
|
||||
+ CPUID_MTRR | CPUID_SEP | CPUID_APIC | CPUID_CX8 | CPUID_MCE |
|
||||
+ CPUID_PAE | CPUID_MSR | CPUID_TSC | CPUID_PSE | CPUID_DE |
|
||||
+ CPUID_VME | CPUID_FP87,
|
||||
+ .features[FEAT_1_ECX] =
|
||||
+ CPUID_EXT_RDRAND | CPUID_EXT_F16C | CPUID_EXT_AVX |
|
||||
+ CPUID_EXT_XSAVE | CPUID_EXT_AES | CPUID_EXT_POPCNT |
|
||||
+ CPUID_EXT_MOVBE | CPUID_EXT_SSE42 | CPUID_EXT_SSE41 |
|
||||
+ CPUID_EXT_PCID | CPUID_EXT_CX16 | CPUID_EXT_FMA |
|
||||
+ CPUID_EXT_SSSE3 | CPUID_EXT_MONITOR | CPUID_EXT_PCLMULQDQ |
|
||||
+ CPUID_EXT_SSE3,
|
||||
+ .features[FEAT_8000_0001_EDX] =
|
||||
+ CPUID_EXT2_LM | CPUID_EXT2_RDTSCP | CPUID_EXT2_PDPE1GB |
|
||||
+ CPUID_EXT2_FFXSR | CPUID_EXT2_MMXEXT | CPUID_EXT2_NX |
|
||||
+ CPUID_EXT2_SYSCALL,
|
||||
+ .features[FEAT_8000_0001_ECX] =
|
||||
+ CPUID_EXT3_OSVW | CPUID_EXT3_3DNOWPREFETCH |
|
||||
+ CPUID_EXT3_MISALIGNSSE | CPUID_EXT3_SSE4A | CPUID_EXT3_ABM |
|
||||
+ CPUID_EXT3_CR8LEG | CPUID_EXT3_SVM | CPUID_EXT3_LAHF_LM |
|
||||
+ CPUID_EXT3_TOPOEXT | CPUID_EXT3_PERFCORE,
|
||||
+ .features[FEAT_8000_0008_EBX] =
|
||||
+ CPUID_8000_0008_EBX_CLZERO | CPUID_8000_0008_EBX_XSAVEERPTR |
|
||||
+ CPUID_8000_0008_EBX_WBNOINVD | CPUID_8000_0008_EBX_IBPB |
|
||||
+ CPUID_8000_0008_EBX_IBRS | CPUID_8000_0008_EBX_STIBP |
|
||||
+ CPUID_8000_0008_EBX_STIBP_ALWAYS_ON |
|
||||
+ CPUID_8000_0008_EBX_AMD_SSBD | CPUID_8000_0008_EBX_AMD_PSFD,
|
||||
+ .features[FEAT_8000_0021_EAX] =
|
||||
+ CPUID_8000_0021_EAX_No_NESTED_DATA_BP |
|
||||
+ CPUID_8000_0021_EAX_LFENCE_ALWAYS_SERIALIZING |
|
||||
+ CPUID_8000_0021_EAX_NULL_SEL_CLR_BASE |
|
||||
+ CPUID_8000_0021_EAX_AUTO_IBRS,
|
||||
+ .features[FEAT_7_0_EBX] =
|
||||
+ CPUID_7_0_EBX_FSGSBASE | CPUID_7_0_EBX_BMI1 | CPUID_7_0_EBX_AVX2 |
|
||||
+ CPUID_7_0_EBX_SMEP | CPUID_7_0_EBX_BMI2 | CPUID_7_0_EBX_ERMS |
|
||||
+ CPUID_7_0_EBX_INVPCID | CPUID_7_0_EBX_AVX512F |
|
||||
+ CPUID_7_0_EBX_AVX512DQ | CPUID_7_0_EBX_RDSEED | CPUID_7_0_EBX_ADX |
|
||||
+ CPUID_7_0_EBX_SMAP | CPUID_7_0_EBX_AVX512IFMA |
|
||||
+ CPUID_7_0_EBX_CLFLUSHOPT | CPUID_7_0_EBX_CLWB |
|
||||
+ CPUID_7_0_EBX_AVX512CD | CPUID_7_0_EBX_SHA_NI |
|
||||
+ CPUID_7_0_EBX_AVX512BW | CPUID_7_0_EBX_AVX512VL,
|
||||
+ .features[FEAT_7_0_ECX] =
|
||||
+ CPUID_7_0_ECX_AVX512_VBMI | CPUID_7_0_ECX_UMIP | CPUID_7_0_ECX_PKU |
|
||||
+ CPUID_7_0_ECX_AVX512_VBMI2 | CPUID_7_0_ECX_GFNI |
|
||||
+ CPUID_7_0_ECX_VAES | CPUID_7_0_ECX_VPCLMULQDQ |
|
||||
+ CPUID_7_0_ECX_AVX512VNNI | CPUID_7_0_ECX_AVX512BITALG |
|
||||
+ CPUID_7_0_ECX_AVX512_VPOPCNTDQ | CPUID_7_0_ECX_LA57 |
|
||||
+ CPUID_7_0_ECX_RDPID,
|
||||
+ .features[FEAT_7_0_EDX] =
|
||||
+ CPUID_7_0_EDX_FSRM,
|
||||
+ .features[FEAT_7_1_EAX] =
|
||||
+ CPUID_7_1_EAX_AVX512_BF16,
|
||||
+ .features[FEAT_XSAVE] =
|
||||
+ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC |
|
||||
+ CPUID_XSAVE_XGETBV1 | CPUID_XSAVE_XSAVES,
|
||||
+ .features[FEAT_6_EAX] =
|
||||
+ CPUID_6_EAX_ARAT,
|
||||
+ .features[FEAT_SVM] =
|
||||
+ CPUID_SVM_NPT | CPUID_SVM_NRIPSAVE | CPUID_SVM_VNMI |
|
||||
+ CPUID_SVM_SVME_ADDR_CHK,
|
||||
+ .xlevel = 0x80000022,
|
||||
+ .model_id = "AMD EPYC-Genoa Processor",
|
||||
+ .cache_info = &epyc_genoa_cache_info,
|
||||
+ },
|
||||
};
|
||||
|
||||
/*
|
||||
--
|
||||
2.39.3
|
||||
|
105
kvm-target-i386-Add-VNMI-and-automatic-IBRS-feature-bits.patch
Normal file
105
kvm-target-i386-Add-VNMI-and-automatic-IBRS-feature-bits.patch
Normal file
@ -0,0 +1,105 @@
|
||||
From 95c5cee20741b055dea9ac3ad3176bbaa1eaf705 Mon Sep 17 00:00:00 2001
|
||||
From: Bandan Das <bsd@redhat.com>
|
||||
Date: Wed, 9 Aug 2023 12:46:25 -0400
|
||||
Subject: [PATCH 6/7] target/i386: Add VNMI and automatic IBRS feature bits
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RH-Author: Bandan Das <None>
|
||||
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
||||
RH-Bugzilla: 2094913
|
||||
RH-Acked-by: Wei Huang <None>
|
||||
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
RH-Commit: [6/7] 24c0fb08973aa2615817f67576550ce2efadb75c (bdas1/qemu-kvm)
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
||||
|
||||
commit 62a798d4bc2c3e767d94670776c77a7df274d7c5
|
||||
Author: Babu Moger <babu.moger@amd.com>
|
||||
Date: Thu May 4 15:53:11 2023 -0500
|
||||
|
||||
target/i386: Add VNMI and automatic IBRS feature bits
|
||||
|
||||
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>
|
||||
|
||||
Signed-off-by: Bandan Das <bsd@redhat.com>
|
||||
---
|
||||
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 bbddc682df..f1baefe775 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, },
|
||||
@@ -925,7 +925,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 c37abf62ae..f7d225e4f1 100644
|
||||
--- a/target/i386/cpu.h
|
||||
+++ b/target/i386/cpu.h
|
||||
@@ -773,6 +773,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.39.3
|
||||
|
@ -0,0 +1,94 @@
|
||||
From 2d7fb99c02a7666f1d8fe70a4749f0b7771a68ed Mon Sep 17 00:00:00 2001
|
||||
From: Bandan Das <bsd@redhat.com>
|
||||
Date: Wed, 9 Aug 2023 12:29:55 -0400
|
||||
Subject: [PATCH 3/7] target/i386: Add a couple of feature bits in
|
||||
8000_0008_EBX
|
||||
|
||||
RH-Author: Bandan Das <None>
|
||||
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
||||
RH-Bugzilla: 2094913
|
||||
RH-Acked-by: Wei Huang <None>
|
||||
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
RH-Commit: [3/7] b11020b249d4ecc2e3e1ddf4fdc4b52c42ec2642 (bdas1/qemu-kvm)
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
||||
|
||||
commit bb039a230e6a7920d71d21fa9afee2653a678c48
|
||||
Author: Babu Moger <babu.moger@amd.com>
|
||||
Date: Thu May 4 15:53:08 2023 -0500
|
||||
|
||||
target/i386: Add a couple of feature bits in 8000_0008_EBX
|
||||
|
||||
Add the following feature bits.
|
||||
|
||||
amd-psfd : Predictive Store Forwarding Disable:
|
||||
PSF is a hardware-based micro-architectural optimization
|
||||
designed to improve the performance of code execution by
|
||||
predicting address dependencies between loads and stores.
|
||||
While SSBD (Speculative Store Bypass Disable) disables both
|
||||
PSF and speculative store bypass, PSFD only disables PSF.
|
||||
PSFD may be desirable for the software which is concerned
|
||||
with the speculative behavior of PSF but desires a smaller
|
||||
performance impact than setting SSBD.
|
||||
Depends on the following kernel commit:
|
||||
b73a54321ad8 ("KVM: x86: Expose Predictive Store Forwarding Disable")
|
||||
|
||||
stibp-always-on :
|
||||
Single Thread Indirect Branch Prediction mode has enhanced
|
||||
performance and may be left always on.
|
||||
|
||||
The documentation for the features are available in the links below.
|
||||
a. Processor Programming Reference (PPR) for AMD Family 19h Model 01h,
|
||||
Revision B1 Processors
|
||||
b. SECURITY ANALYSIS OF AMD PREDICTIVE STORE FORWARDING
|
||||
|
||||
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
||||
Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Link: https://www.amd.com/system/files/documents/security-analysis-predictive-store-forwarding.pdf
|
||||
Link: https://www.amd.com/system/files/TechDocs/55898_B1_pub_0.50.zip
|
||||
Message-Id: <20230504205313.225073-4-babu.moger@amd.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
||||
Signed-off-by: Bandan Das <bsd@redhat.com>
|
||||
---
|
||||
target/i386/cpu.c | 4 ++--
|
||||
target/i386/cpu.h | 4 ++++
|
||||
2 files changed, 6 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index 8aa7eb611c..c8f88aefc7 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -911,10 +911,10 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
||||
NULL, NULL, NULL, NULL,
|
||||
NULL, "wbnoinvd", NULL, NULL,
|
||||
"ibpb", NULL, "ibrs", "amd-stibp",
|
||||
- NULL, NULL, NULL, NULL,
|
||||
+ NULL, "stibp-always-on", NULL, NULL,
|
||||
NULL, NULL, NULL, NULL,
|
||||
"amd-ssbd", "virt-ssbd", "amd-no-ssb", NULL,
|
||||
- NULL, NULL, NULL, NULL,
|
||||
+ "amd-psfd", NULL, NULL, NULL,
|
||||
},
|
||||
.cpuid = { .eax = 0x80000008, .reg = R_EBX, },
|
||||
.tcg_features = 0,
|
||||
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
|
||||
index c28b9df217..81d2200543 100644
|
||||
--- a/target/i386/cpu.h
|
||||
+++ b/target/i386/cpu.h
|
||||
@@ -934,8 +934,12 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||||
#define CPUID_8000_0008_EBX_IBRS (1U << 14)
|
||||
/* Single Thread Indirect Branch Predictors */
|
||||
#define CPUID_8000_0008_EBX_STIBP (1U << 15)
|
||||
+/* STIBP mode has enhanced performance and may be left always on */
|
||||
+#define CPUID_8000_0008_EBX_STIBP_ALWAYS_ON (1U << 17)
|
||||
/* Speculative Store Bypass Disable */
|
||||
#define CPUID_8000_0008_EBX_AMD_SSBD (1U << 24)
|
||||
+/* Predictive Store Forwarding Disable */
|
||||
+#define CPUID_8000_0008_EBX_AMD_PSFD (1U << 28)
|
||||
|
||||
#define CPUID_XSAVE_XSAVEOPT (1U << 0)
|
||||
#define CPUID_XSAVE_XSAVEC (1U << 1)
|
||||
--
|
||||
2.39.3
|
||||
|
126
kvm-target-i386-Add-feature-bits-for-CPUID_Fn80000021_EA.patch
Normal file
126
kvm-target-i386-Add-feature-bits-for-CPUID_Fn80000021_EA.patch
Normal file
@ -0,0 +1,126 @@
|
||||
From 2a2f74c53258ef67034307b59afe2f4c679afaa2 Mon Sep 17 00:00:00 2001
|
||||
From: Bandan Das <bsd@redhat.com>
|
||||
Date: Wed, 9 Aug 2023 12:32:00 -0400
|
||||
Subject: [PATCH 4/7] target/i386: Add feature bits for CPUID_Fn80000021_EAX
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RH-Author: Bandan Das <None>
|
||||
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
||||
RH-Bugzilla: 2094913
|
||||
RH-Acked-by: Wei Huang <None>
|
||||
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
RH-Commit: [4/7] 133044a7245226308406a684a875e1f96a394516 (bdas1/qemu-kvm)
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
||||
|
||||
commit b70eec312b185197d639bff689007727e596afd1
|
||||
Author: Babu Moger <babu.moger@amd.com>
|
||||
Date: Thu May 4 15:53:09 2023 -0500
|
||||
|
||||
target/i386: Add feature bits for CPUID_Fn80000021_EAX
|
||||
|
||||
Add the following feature bits.
|
||||
no-nested-data-bp : Processor ignores nested data breakpoints.
|
||||
lfence-always-serializing : LFENCE instruction is always serializing.
|
||||
null-sel-cls-base : Null Selector Clears Base. When this bit is
|
||||
set, a null segment load clears the segment base.
|
||||
|
||||
The documentation 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: Babu Moger <babu.moger@amd.com>
|
||||
Acked-by: Michael S. Tsirkin <mst@redhat.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-5-babu.moger@amd.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
||||
Signed-off-by: Bandan Das <bsd@redhat.com>
|
||||
---
|
||||
target/i386/cpu.c | 24 ++++++++++++++++++++++++
|
||||
target/i386/cpu.h | 8 ++++++++
|
||||
2 files changed, 32 insertions(+)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index c8f88aefc7..7ddebbaa3c 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -920,6 +920,22 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
|
||||
.tcg_features = 0,
|
||||
.unmigratable_flags = 0,
|
||||
},
|
||||
+ [FEAT_8000_0021_EAX] = {
|
||||
+ .type = CPUID_FEATURE_WORD,
|
||||
+ .feat_names = {
|
||||
+ "no-nested-data-bp", NULL, "lfence-always-serializing", NULL,
|
||||
+ NULL, NULL, "null-sel-clr-base", NULL,
|
||||
+ NULL, NULL, NULL, NULL,
|
||||
+ NULL, NULL, NULL, NULL,
|
||||
+ NULL, NULL, NULL, NULL,
|
||||
+ NULL, NULL, NULL, NULL,
|
||||
+ NULL, NULL, NULL, NULL,
|
||||
+ NULL, NULL, NULL, NULL,
|
||||
+ },
|
||||
+ .cpuid = { .eax = 0x80000021, .reg = R_EAX, },
|
||||
+ .tcg_features = 0,
|
||||
+ .unmigratable_flags = 0,
|
||||
+ },
|
||||
[FEAT_XSAVE] = {
|
||||
.type = CPUID_FEATURE_WORD,
|
||||
.feat_names = {
|
||||
@@ -6156,6 +6172,10 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
||||
*ebx |= (sev_get_reduced_phys_bits() & 0x3f) << 6; /* EBX[11:6] */
|
||||
}
|
||||
break;
|
||||
+ case 0x80000021:
|
||||
+ *eax = env->features[FEAT_8000_0021_EAX];
|
||||
+ *ebx = *ecx = *edx = 0;
|
||||
+ break;
|
||||
default:
|
||||
/* reserved values: zero */
|
||||
*eax = 0;
|
||||
@@ -6585,6 +6605,10 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp)
|
||||
x86_cpu_adjust_level(cpu, &env->cpuid_min_xlevel, 0x8000001F);
|
||||
}
|
||||
|
||||
+ if (env->features[FEAT_8000_0021_EAX]) {
|
||||
+ x86_cpu_adjust_level(cpu, &env->cpuid_min_xlevel, 0x80000021);
|
||||
+ }
|
||||
+
|
||||
/* SGX requires CPUID[0x12] for EPC enumeration */
|
||||
if (env->features[FEAT_7_0_EBX] & CPUID_7_0_EBX_SGX) {
|
||||
x86_cpu_adjust_level(cpu, &env->cpuid_min_level, 0x12);
|
||||
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
|
||||
index 81d2200543..c37abf62ae 100644
|
||||
--- a/target/i386/cpu.h
|
||||
+++ b/target/i386/cpu.h
|
||||
@@ -600,6 +600,7 @@ typedef enum FeatureWord {
|
||||
FEAT_8000_0001_ECX, /* CPUID[8000_0001].ECX */
|
||||
FEAT_8000_0007_EDX, /* CPUID[8000_0007].EDX */
|
||||
FEAT_8000_0008_EBX, /* CPUID[8000_0008].EBX */
|
||||
+ FEAT_8000_0021_EAX, /* CPUID[8000_0021].EAX */
|
||||
FEAT_C000_0001_EDX, /* CPUID[C000_0001].EDX */
|
||||
FEAT_KVM, /* CPUID[4000_0001].EAX (KVM_CPUID_FEATURES) */
|
||||
FEAT_KVM_HINTS, /* CPUID[4000_0001].EDX */
|
||||
@@ -941,6 +942,13 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
|
||||
/* Predictive Store Forwarding Disable */
|
||||
#define CPUID_8000_0008_EBX_AMD_PSFD (1U << 28)
|
||||
|
||||
+/* Processor ignores nested data breakpoints */
|
||||
+#define CPUID_8000_0021_EAX_No_NESTED_DATA_BP (1U << 0)
|
||||
+/* LFENCE is always serializing */
|
||||
+#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)
|
||||
+
|
||||
#define CPUID_XSAVE_XSAVEOPT (1U << 0)
|
||||
#define CPUID_XSAVE_XSAVEC (1U << 1)
|
||||
#define CPUID_XSAVE_XGETBV1 (1U << 2)
|
||||
--
|
||||
2.39.3
|
||||
|
152
kvm-target-i386-Add-missing-feature-bits-in-EPYC-Milan-m.patch
Normal file
152
kvm-target-i386-Add-missing-feature-bits-in-EPYC-Milan-m.patch
Normal file
@ -0,0 +1,152 @@
|
||||
From a8180665019d537ee9775614627bf9eb8bd4770e Mon Sep 17 00:00:00 2001
|
||||
From: Bandan Das <bsd@redhat.com>
|
||||
Date: Wed, 9 Aug 2023 12:35:33 -0400
|
||||
Subject: [PATCH 5/7] target/i386: Add missing feature bits in EPYC-Milan model
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
RH-Author: Bandan Das <None>
|
||||
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
||||
RH-Bugzilla: 2094913
|
||||
RH-Acked-by: Wei Huang <None>
|
||||
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
RH-Commit: [5/7] 8f77315c8d7010564423df3e3c594c90fd5f9c00 (bdas1/qemu-kvm)
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
||||
|
||||
commit 27f03be6f59d04bd5673ba1e1628b2b490f9a9ff
|
||||
Author: Babu Moger <babu.moger@amd.com>
|
||||
Date: Thu May 4 15:53:10 2023 -0500
|
||||
|
||||
target/i386: Add missing feature bits in EPYC-Milan model
|
||||
|
||||
Add the following feature bits for EPYC-Milan model and bump the version.
|
||||
vaes : Vector VAES(ENC|DEC), VAES(ENC|DEC)LAST instruction support
|
||||
vpclmulqdq : Vector VPCLMULQDQ instruction support
|
||||
stibp-always-on : Single Thread Indirect Branch Prediction Mode has enhanced
|
||||
performance and may be left Always on
|
||||
amd-psfd : Predictive Store Forward Disable
|
||||
no-nested-data-bp : Processor ignores nested data breakpoints
|
||||
lfence-always-serializing : LFENCE instruction is always serializing
|
||||
null-sel-clr-base : Null Selector Clears Base. When this bit is
|
||||
set, a null segment load clears the segment base
|
||||
|
||||
These new features will be added in EPYC-Milan-v2. The "-cpu help" output
|
||||
after the change will be.
|
||||
|
||||
x86 EPYC-Milan (alias configured by machine type)
|
||||
x86 EPYC-Milan-v1 AMD EPYC-Milan Processor
|
||||
x86 EPYC-Milan-v2 AMD EPYC-Milan Processor
|
||||
|
||||
The documentation for the features are available in the links below.
|
||||
a. Processor Programming Reference (PPR) for AMD Family 19h Model 01h,
|
||||
Revision B1 Processors
|
||||
b. SECURITY ANALYSIS OF AMD PREDICTIVE STORE FORWARDING
|
||||
c. AMD64 Architecture Programmer’s Manual Volumes 1–5 Publication No. Revision
|
||||
40332 4.05 Date October 2022
|
||||
|
||||
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
||||
Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Link: https://www.amd.com/system/files/TechDocs/55898_B1_pub_0.50.zip
|
||||
Link: https://www.amd.com/system/files/documents/security-analysis-predictive-store-forwarding.pdf
|
||||
Link: https://www.amd.com/system/files/TechDocs/40332_4.05.pdf
|
||||
Message-Id: <20230504205313.225073-6-babu.moger@amd.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
||||
Signed-off-by: Bandan Das <bsd@redhat.com>
|
||||
---
|
||||
target/i386/cpu.c | 70 +++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 70 insertions(+)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index 7ddebbaa3c..bbddc682df 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -1923,6 +1923,56 @@ static const CPUCaches epyc_milan_cache_info = {
|
||||
},
|
||||
};
|
||||
|
||||
+static const CPUCaches epyc_milan_v2_cache_info = {
|
||||
+ .l1d_cache = &(CPUCacheInfo) {
|
||||
+ .type = DATA_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 32 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 64,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l1i_cache = &(CPUCacheInfo) {
|
||||
+ .type = INSTRUCTION_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 32 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 64,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l2_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 2,
|
||||
+ .size = 512 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 1024,
|
||||
+ .lines_per_tag = 1,
|
||||
+ },
|
||||
+ .l3_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 3,
|
||||
+ .size = 32 * MiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 16,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 32768,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = true,
|
||||
+ .inclusive = true,
|
||||
+ .complex_indexing = false,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
/* The following VMX features are not supported by KVM and are left out in the
|
||||
* CPU definitions:
|
||||
*
|
||||
@@ -4422,6 +4472,26 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
||||
.xlevel = 0x8000001E,
|
||||
.model_id = "AMD EPYC-Milan Processor",
|
||||
.cache_info = &epyc_milan_cache_info,
|
||||
+ .versions = (X86CPUVersionDefinition[]) {
|
||||
+ { .version = 1 },
|
||||
+ {
|
||||
+ .version = 2,
|
||||
+ .props = (PropValue[]) {
|
||||
+ { "model-id",
|
||||
+ "AMD EPYC-Milan-v2 Processor" },
|
||||
+ { "vaes", "on" },
|
||||
+ { "vpclmulqdq", "on" },
|
||||
+ { "stibp-always-on", "on" },
|
||||
+ { "amd-psfd", "on" },
|
||||
+ { "no-nested-data-bp", "on" },
|
||||
+ { "lfence-always-serializing", "on" },
|
||||
+ { "null-sel-clr-base", "on" },
|
||||
+ { /* end of list */ }
|
||||
+ },
|
||||
+ .cache_info = &epyc_milan_v2_cache_info
|
||||
+ },
|
||||
+ { /* end of list */ }
|
||||
+ }
|
||||
},
|
||||
};
|
||||
|
||||
--
|
||||
2.39.3
|
||||
|
192
kvm-target-i386-Add-new-EPYC-CPU-versions-with-updated-c.patch
Normal file
192
kvm-target-i386-Add-new-EPYC-CPU-versions-with-updated-c.patch
Normal file
@ -0,0 +1,192 @@
|
||||
From 92f0b5d0c7a841a21cabbc6efc1d7baf0e5a3e0f Mon Sep 17 00:00:00 2001
|
||||
From: Bandan Das <bsd@redhat.com>
|
||||
Date: Wed, 9 Aug 2023 12:26:12 -0400
|
||||
Subject: [PATCH 2/7] target/i386: Add new EPYC CPU versions with updated
|
||||
cache_info
|
||||
|
||||
RH-Author: Bandan Das <None>
|
||||
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
||||
RH-Bugzilla: 2094913
|
||||
RH-Acked-by: Wei Huang <None>
|
||||
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
RH-Commit: [2/7] 71a2fd907636733f86729bc9328600f6f9306eaf (bdas1/qemu-kvm)
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
||||
|
||||
commit d7c72735f618a7ee27ee109d8b1468193734606a
|
||||
Author: Michael Roth <michael.roth@amd.com>
|
||||
Date: Thu May 4 15:53:07 2023 -0500
|
||||
|
||||
target/i386: Add new EPYC CPU versions with updated cache_info
|
||||
|
||||
Introduce new EPYC cpu versions: EPYC-v4 and EPYC-Rome-v3.
|
||||
The only difference vs. older models is an updated cache_info with
|
||||
the 'complex_indexing' bit unset, since this bit is not currently
|
||||
defined for AMD and may cause problems should it be used for
|
||||
something else in the future. Setting this bit will also cause
|
||||
CPUID validation failures when running SEV-SNP guests.
|
||||
|
||||
Signed-off-by: Michael Roth <michael.roth@amd.com>
|
||||
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
||||
Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Message-Id: <20230504205313.225073-3-babu.moger@amd.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
||||
Signed-off-by: Bandan Das <bsd@redhat.com>
|
||||
---
|
||||
target/i386/cpu.c | 118 ++++++++++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 118 insertions(+)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index 3558c92ed0..8aa7eb611c 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -1707,6 +1707,56 @@ static const CPUCaches epyc_cache_info = {
|
||||
},
|
||||
};
|
||||
|
||||
+static CPUCaches epyc_v4_cache_info = {
|
||||
+ .l1d_cache = &(CPUCacheInfo) {
|
||||
+ .type = DATA_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 32 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 64,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l1i_cache = &(CPUCacheInfo) {
|
||||
+ .type = INSTRUCTION_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 64 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 4,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 256,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l2_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 2,
|
||||
+ .size = 512 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 1024,
|
||||
+ .lines_per_tag = 1,
|
||||
+ },
|
||||
+ .l3_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 3,
|
||||
+ .size = 8 * MiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 16,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 8192,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = true,
|
||||
+ .inclusive = true,
|
||||
+ .complex_indexing = false,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
static const CPUCaches epyc_rome_cache_info = {
|
||||
.l1d_cache = &(CPUCacheInfo) {
|
||||
.type = DATA_CACHE,
|
||||
@@ -1757,6 +1807,56 @@ static const CPUCaches epyc_rome_cache_info = {
|
||||
},
|
||||
};
|
||||
|
||||
+static const CPUCaches epyc_rome_v3_cache_info = {
|
||||
+ .l1d_cache = &(CPUCacheInfo) {
|
||||
+ .type = DATA_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 32 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 64,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l1i_cache = &(CPUCacheInfo) {
|
||||
+ .type = INSTRUCTION_CACHE,
|
||||
+ .level = 1,
|
||||
+ .size = 32 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 64,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = 1,
|
||||
+ .no_invd_sharing = true,
|
||||
+ },
|
||||
+ .l2_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 2,
|
||||
+ .size = 512 * KiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 8,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 1024,
|
||||
+ .lines_per_tag = 1,
|
||||
+ },
|
||||
+ .l3_cache = &(CPUCacheInfo) {
|
||||
+ .type = UNIFIED_CACHE,
|
||||
+ .level = 3,
|
||||
+ .size = 16 * MiB,
|
||||
+ .line_size = 64,
|
||||
+ .associativity = 16,
|
||||
+ .partitions = 1,
|
||||
+ .sets = 16384,
|
||||
+ .lines_per_tag = 1,
|
||||
+ .self_init = true,
|
||||
+ .inclusive = true,
|
||||
+ .complex_indexing = false,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
static const CPUCaches epyc_milan_cache_info = {
|
||||
.l1d_cache = &(CPUCacheInfo) {
|
||||
.type = DATA_CACHE,
|
||||
@@ -4112,6 +4212,15 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
||||
{ /* end of list */ }
|
||||
}
|
||||
},
|
||||
+ {
|
||||
+ .version = 4,
|
||||
+ .props = (PropValue[]) {
|
||||
+ { "model-id",
|
||||
+ "AMD EPYC-v4 Processor" },
|
||||
+ { /* end of list */ }
|
||||
+ },
|
||||
+ .cache_info = &epyc_v4_cache_info
|
||||
+ },
|
||||
{ /* end of list */ }
|
||||
}
|
||||
},
|
||||
@@ -4231,6 +4340,15 @@ static const X86CPUDefinition builtin_x86_defs[] = {
|
||||
{ /* end of list */ }
|
||||
}
|
||||
},
|
||||
+ {
|
||||
+ .version = 3,
|
||||
+ .props = (PropValue[]) {
|
||||
+ { "model-id",
|
||||
+ "AMD EPYC-Rome-v3 Processor" },
|
||||
+ { /* end of list */ }
|
||||
+ },
|
||||
+ .cache_info = &epyc_rome_v3_cache_info
|
||||
+ },
|
||||
{ /* end of list */ }
|
||||
}
|
||||
},
|
||||
--
|
||||
2.39.3
|
||||
|
116
kvm-target-i386-allow-versioned-CPUs-to-specify-new-cach.patch
Normal file
116
kvm-target-i386-allow-versioned-CPUs-to-specify-new-cach.patch
Normal file
@ -0,0 +1,116 @@
|
||||
From 457e74c076e0fe7b64631dfd4369d167f0762c9a Mon Sep 17 00:00:00 2001
|
||||
From: Bandan Das <bsd@redhat.com>
|
||||
Date: Wed, 9 Aug 2023 12:22:41 -0400
|
||||
Subject: [PATCH 1/7] target/i386: allow versioned CPUs to specify new
|
||||
cache_info
|
||||
|
||||
RH-Author: Bandan Das <None>
|
||||
RH-MergeRequest: 198: Add EPYC-Genoa CPU model in qemu
|
||||
RH-Bugzilla: 2094913
|
||||
RH-Acked-by: Wei Huang <None>
|
||||
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
||||
RH-Commit: [1/7] 6070e07a4bb070d1c15a811b2bd3195929c18d61 (bdas1/qemu-kvm)
|
||||
|
||||
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=2094913
|
||||
|
||||
commit cca0a000d06f897411a8af4402e5d0522bbe450b
|
||||
Author: Michael Roth <michael.roth@amd.com>
|
||||
Date: Thu May 4 15:53:06 2023 -0500
|
||||
|
||||
target/i386: allow versioned CPUs to specify new cache_info
|
||||
|
||||
New EPYC CPUs versions require small changes to their cache_info's.
|
||||
Because current QEMU x86 CPU definition does not support versioned
|
||||
cach_info, we would have to declare a new CPU type for each such case.
|
||||
To avoid the dup work, add "cache_info" in X86CPUVersionDefinition",
|
||||
to allow new cache_info pointers to be specified for a new CPU version.
|
||||
|
||||
Co-developed-by: Wei Huang <wei.huang2@amd.com>
|
||||
Signed-off-by: Wei Huang <wei.huang2@amd.com>
|
||||
Signed-off-by: Michael Roth <michael.roth@amd.com>
|
||||
Signed-off-by: Babu Moger <babu.moger@amd.com>
|
||||
Acked-by: Michael S. Tsirkin <mst@redhat.com>
|
||||
Message-Id: <20230504205313.225073-2-babu.moger@amd.com>
|
||||
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
||||
|
||||
Signed-off-by: Bandan Das <bsd@redhat.com>
|
||||
---
|
||||
target/i386/cpu.c | 35 ++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 32 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
|
||||
index 4ac3046313..3558c92ed0 100644
|
||||
--- a/target/i386/cpu.c
|
||||
+++ b/target/i386/cpu.c
|
||||
@@ -1598,6 +1598,7 @@ typedef struct X86CPUVersionDefinition {
|
||||
const char *alias;
|
||||
const char *note;
|
||||
PropValue *props;
|
||||
+ const CPUCaches *const cache_info;
|
||||
} X86CPUVersionDefinition;
|
||||
|
||||
/* Base definition for a CPU model */
|
||||
@@ -5213,6 +5214,31 @@ static void x86_cpu_apply_version_props(X86CPU *cpu, X86CPUModel *model)
|
||||
assert(vdef->version == version);
|
||||
}
|
||||
|
||||
+static const CPUCaches *x86_cpu_get_versioned_cache_info(X86CPU *cpu,
|
||||
+ X86CPUModel *model)
|
||||
+{
|
||||
+ const X86CPUVersionDefinition *vdef;
|
||||
+ X86CPUVersion version = x86_cpu_model_resolve_version(model);
|
||||
+ const CPUCaches *cache_info = model->cpudef->cache_info;
|
||||
+
|
||||
+ if (version == CPU_VERSION_LEGACY) {
|
||||
+ return cache_info;
|
||||
+ }
|
||||
+
|
||||
+ for (vdef = x86_cpu_def_get_versions(model->cpudef); vdef->version; vdef++) {
|
||||
+ if (vdef->cache_info) {
|
||||
+ cache_info = vdef->cache_info;
|
||||
+ }
|
||||
+
|
||||
+ if (vdef->version == version) {
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ assert(vdef->version == version);
|
||||
+ return cache_info;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* Load data from X86CPUDefinition into a X86CPU object.
|
||||
* Only for builtin_x86_defs models initialized with x86_register_cpudef_types.
|
||||
@@ -5245,7 +5271,7 @@ static void x86_cpu_load_model(X86CPU *cpu, X86CPUModel *model)
|
||||
}
|
||||
|
||||
/* legacy-cache defaults to 'off' if CPU model provides cache info */
|
||||
- cpu->legacy_cache = !def->cache_info;
|
||||
+ cpu->legacy_cache = !x86_cpu_get_versioned_cache_info(cpu, model);
|
||||
|
||||
env->features[FEAT_1_ECX] |= CPUID_EXT_HYPERVISOR;
|
||||
|
||||
@@ -6724,14 +6750,17 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
|
||||
|
||||
/* Cache information initialization */
|
||||
if (!cpu->legacy_cache) {
|
||||
- if (!xcc->model || !xcc->model->cpudef->cache_info) {
|
||||
+ const CPUCaches *cache_info =
|
||||
+ x86_cpu_get_versioned_cache_info(cpu, xcc->model);
|
||||
+
|
||||
+ if (!xcc->model || !cache_info) {
|
||||
g_autofree char *name = x86_cpu_class_get_model_name(xcc);
|
||||
error_setg(errp,
|
||||
"CPU model '%s' doesn't support legacy-cache=off", name);
|
||||
return;
|
||||
}
|
||||
env->cache_info_cpuid2 = env->cache_info_cpuid4 = env->cache_info_amd =
|
||||
- *xcc->model->cpudef->cache_info;
|
||||
+ *cache_info;
|
||||
} else {
|
||||
/* Build legacy cache information */
|
||||
env->cache_info_cpuid2.l1d_cache = &legacy_l1d_cache;
|
||||
--
|
||||
2.39.3
|
||||
|
@ -149,7 +149,7 @@ Obsoletes: %{name}-block-ssh <= %{epoch}:%{version} \
|
||||
Summary: QEMU is a machine emulator and virtualizer
|
||||
Name: qemu-kvm
|
||||
Version: 8.0.0
|
||||
Release: 11%{?rcrel}%{?dist}%{?cc_suffix}
|
||||
Release: 12%{?rcrel}%{?dist}%{?cc_suffix}
|
||||
# Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped
|
||||
# Epoch 15 used for RHEL 8
|
||||
# Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5)
|
||||
@ -518,6 +518,20 @@ Patch177: kvm-qemu-options.hx-Update-the-reduced-phys-bits-documen.patch
|
||||
Patch178: kvm-i386-sev-Update-checks-and-information-related-to-re.patch
|
||||
# For bz#2214839 - [AMDSERVER 9.3 Bug] Qemu SEV reduced-phys-bits fixes
|
||||
Patch179: kvm-i386-cpu-Update-how-the-EBX-register-of-CPUID-0x8000.patch
|
||||
# For bz#2094913 - Add EPYC-Genoa CPU model in qemu
|
||||
Patch180: kvm-target-i386-allow-versioned-CPUs-to-specify-new-cach.patch
|
||||
# For bz#2094913 - Add EPYC-Genoa CPU model in qemu
|
||||
Patch181: kvm-target-i386-Add-new-EPYC-CPU-versions-with-updated-c.patch
|
||||
# For bz#2094913 - Add EPYC-Genoa CPU model in qemu
|
||||
Patch182: kvm-target-i386-Add-a-couple-of-feature-bits-in-8000_000.patch
|
||||
# For bz#2094913 - Add EPYC-Genoa CPU model in qemu
|
||||
Patch183: kvm-target-i386-Add-feature-bits-for-CPUID_Fn80000021_EA.patch
|
||||
# For bz#2094913 - Add EPYC-Genoa CPU model in qemu
|
||||
Patch184: kvm-target-i386-Add-missing-feature-bits-in-EPYC-Milan-m.patch
|
||||
# For bz#2094913 - Add EPYC-Genoa CPU model in qemu
|
||||
Patch185: kvm-target-i386-Add-VNMI-and-automatic-IBRS-feature-bits.patch
|
||||
# For bz#2094913 - Add EPYC-Genoa CPU model in qemu
|
||||
Patch186: kvm-target-i386-Add-EPYC-Genoa-model-to-support-Zen-4-pr.patch
|
||||
|
||||
%if %{have_clang}
|
||||
BuildRequires: clang
|
||||
@ -1579,6 +1593,17 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Aug 21 2023 Miroslav Rezanina <mrezanin@redhat.com> - 8.0.0-12
|
||||
- kvm-target-i386-allow-versioned-CPUs-to-specify-new-cach.patch [bz#2094913]
|
||||
- kvm-target-i386-Add-new-EPYC-CPU-versions-with-updated-c.patch [bz#2094913]
|
||||
- kvm-target-i386-Add-a-couple-of-feature-bits-in-8000_000.patch [bz#2094913]
|
||||
- kvm-target-i386-Add-feature-bits-for-CPUID_Fn80000021_EA.patch [bz#2094913]
|
||||
- kvm-target-i386-Add-missing-feature-bits-in-EPYC-Milan-m.patch [bz#2094913]
|
||||
- kvm-target-i386-Add-VNMI-and-automatic-IBRS-feature-bits.patch [bz#2094913]
|
||||
- kvm-target-i386-Add-EPYC-Genoa-model-to-support-Zen-4-pr.patch [bz#2094913]
|
||||
- Resolves: bz#2094913
|
||||
(Add EPYC-Genoa CPU model in qemu)
|
||||
|
||||
* Mon Aug 07 2023 Miroslav Rezanina <mrezanin@redhat.com> - 8.0.0-11
|
||||
- kvm-block-blkio-enable-the-completion-eventfd.patch [bz#2225354 bz#2225439]
|
||||
- kvm-block-blkio-do-not-use-open-flags-in-qemu_open.patch [bz#2225354 bz#2225439]
|
||||
|
Loading…
Reference in New Issue
Block a user