* [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits
2025-02-06 19:28 [PATCH v5 0/6] target/i386: Update EPYC CPU models for Cache property, RAS, SVM feature and add EPYC-Turin CPU model Babu Moger
@ 2025-02-06 19:28 ` Babu Moger
2025-02-20 10:59 ` Zhao Liu
2025-02-06 19:28 ` [PATCH v5 2/6] target/i386: Update EPYC-Rome " Babu Moger
` (4 subsequent siblings)
5 siblings, 1 reply; 21+ messages in thread
From: Babu Moger @ 2025-02-06 19:28 UTC (permalink / raw)
To: pbonzini; +Cc: zhao1.liu, qemu-devel, kvm, davydov-max
Found that some of the cache properties are not set correctly for EPYC models.
l1d_cache.no_invd_sharing should not be true.
l1i_cache.no_invd_sharing should not be true.
L2.self_init should be true.
L2.inclusive should be true.
L3.inclusive should not be true.
L3.no_invd_sharing should be true.
Fix the cache properties.
Also add the missing RAS and SVM features bits on AMD
EPYC CPU models. The SVM feature bits are used in nested guests.
succor : Software uncorrectable error containment and recovery capability.
overflow-recov : MCA overflow recovery support.
lbrv : LBR virtualization
tsc-scale : MSR based TSC rate control
vmcb-clean : VMCB clean bits
flushbyasid : Flush by ASID
pause-filter : Pause intercept filter
pfthreshold : PAUSE filter threshold
v-vmsave-vmload : Virtualized VMLOAD and VMSAVE
vgif : Virtualized GIF
Signed-off-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
---
target/i386/cpu.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index b5dd60d281..94292bfaa2 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2180,6 +2180,60 @@ static CPUCaches epyc_v4_cache_info = {
},
};
+static CPUCaches epyc_v5_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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .l2_cache = &(CPUCacheInfo) {
+ .type = UNIFIED_CACHE,
+ .level = 2,
+ .size = 512 * KiB,
+ .line_size = 64,
+ .associativity = 8,
+ .partitions = 1,
+ .sets = 1024,
+ .lines_per_tag = 1,
+ .self_init = true,
+ .inclusive = true,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .no_invd_sharing = true,
+ .complex_indexing = false,
+ .share_level = CPU_TOPOLOGY_LEVEL_DIE,
+ },
+};
+
static const CPUCaches epyc_rome_cache_info = {
.l1d_cache = &(CPUCacheInfo) {
.type = DATA_CACHE,
@@ -5207,6 +5261,25 @@ static const X86CPUDefinition builtin_x86_defs[] = {
},
.cache_info = &epyc_v4_cache_info
},
+ {
+ .version = 5,
+ .props = (PropValue[]) {
+ { "overflow-recov", "on" },
+ { "succor", "on" },
+ { "lbrv", "on" },
+ { "tsc-scale", "on" },
+ { "vmcb-clean", "on" },
+ { "flushbyasid", "on" },
+ { "pause-filter", "on" },
+ { "pfthreshold", "on" },
+ { "v-vmsave-vmload", "on" },
+ { "vgif", "on" },
+ { "model-id",
+ "AMD EPYC-v5 Processor" },
+ { /* end of list */ }
+ },
+ .cache_info = &epyc_v5_cache_info
+ },
{ /* end of list */ }
}
},
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits
2025-02-06 19:28 ` [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits Babu Moger
@ 2025-02-20 10:59 ` Zhao Liu
2025-02-25 17:01 ` John Allen
0 siblings, 1 reply; 21+ messages in thread
From: Zhao Liu @ 2025-02-20 10:59 UTC (permalink / raw)
To: Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
> +static CPUCaches epyc_v5_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,
For consistency as the below parts, it's better to code `true` for all
boolean types.
> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> + },
> + .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,
ditto.
Others are fine for me, so,
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
And one more thing :-) ...
> static const CPUCaches epyc_rome_cache_info = {
> .l1d_cache = &(CPUCacheInfo) {
> .type = DATA_CACHE,
> @@ -5207,6 +5261,25 @@ static const X86CPUDefinition builtin_x86_defs[] = {
> },
> .cache_info = &epyc_v4_cache_info
> },
> + {
> + .version = 5,
> + .props = (PropValue[]) {
> + { "overflow-recov", "on" },
> + { "succor", "on" },
When I checks the "overflow-recov" and "succor" enabling, I find these 2
bits are set unconditionally.
I'm not sure if all AMD platforms support both bits, do you think it's
necessary to check the host support?
diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
index 6c749d4ee812..03e463076632 100644
--- a/target/i386/kvm/kvm.c
+++ b/target/i386/kvm/kvm.c
@@ -555,7 +555,10 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,
cpuid_1_edx = kvm_arch_get_supported_cpuid(s, 1, 0, R_EDX);
ret |= cpuid_1_edx & CPUID_EXT2_AMD_ALIASES;
} else if (function == 0x80000007 && reg == R_EBX) {
- ret |= CPUID_8000_0007_EBX_OVERFLOW_RECOV | CPUID_8000_0007_EBX_SUCCOR;
+ uint32_t ebx;
+ host_cpuid(0x80000007, 0, &unused, &ebx, &unused, &unused);
+
+ ret |= ebx & (CPUID_8000_0007_EBX_OVERFLOW_RECOV | CPUID_8000_0007_EBX_SUCCOR);
} else if (function == KVM_CPUID_FEATURES && reg == R_EAX) {
/* kvm_pv_unhalt is reported by GET_SUPPORTED_CPUID, but it can't
* be enabled without the in-kernel irqchip
Thanks,
Zhao
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits
2025-02-20 10:59 ` Zhao Liu
@ 2025-02-25 17:01 ` John Allen
2025-02-26 20:28 ` Moger, Babu
0 siblings, 1 reply; 21+ messages in thread
From: John Allen @ 2025-02-25 17:01 UTC (permalink / raw)
To: Zhao Liu; +Cc: Babu Moger, pbonzini, qemu-devel, kvm, davydov-max, Joao Martins
On Thu, Feb 20, 2025 at 06:59:34PM +0800, Zhao Liu wrote:
> And one more thing :-) ...
>
> > static const CPUCaches epyc_rome_cache_info = {
> > .l1d_cache = &(CPUCacheInfo) {
> > .type = DATA_CACHE,
> > @@ -5207,6 +5261,25 @@ static const X86CPUDefinition builtin_x86_defs[] = {
> > },
> > .cache_info = &epyc_v4_cache_info
> > },
> > + {
> > + .version = 5,
> > + .props = (PropValue[]) {
> > + { "overflow-recov", "on" },
> > + { "succor", "on" },
>
> When I checks the "overflow-recov" and "succor" enabling, I find these 2
> bits are set unconditionally.
>
> I'm not sure if all AMD platforms support both bits, do you think it's
> necessary to check the host support?
Hi Zhao,
IIRC, we intentionally set these unconditionally since there is no
specific support needed from the host side for guests to use these bits
to handle MCEs. See the original discussion and rationale in this
thread:
https://lore.kernel.org/all/20230706194022.2485195-2-john.allen@amd.com/
However, this discussion only applied to the SUCCOR feature and not the
OVERFLOW_RECOV feature and now that you bring it up, I'm second guessing
whether we can apply the same thinking to OVERFLOW_RECOV. I think we may
want to keep setting the SUCCOR bit unconditionally, but we may want to
handle OVERFLOW_RECOV normally. I'll have to track down some old
hardware to see how this behaves when the hardware doesn't support it.
Thanks,
John
>
> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
> index 6c749d4ee812..03e463076632 100644
> --- a/target/i386/kvm/kvm.c
> +++ b/target/i386/kvm/kvm.c
> @@ -555,7 +555,10 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,
> cpuid_1_edx = kvm_arch_get_supported_cpuid(s, 1, 0, R_EDX);
> ret |= cpuid_1_edx & CPUID_EXT2_AMD_ALIASES;
> } else if (function == 0x80000007 && reg == R_EBX) {
> - ret |= CPUID_8000_0007_EBX_OVERFLOW_RECOV | CPUID_8000_0007_EBX_SUCCOR;
> + uint32_t ebx;
> + host_cpuid(0x80000007, 0, &unused, &ebx, &unused, &unused);
> +
> + ret |= ebx & (CPUID_8000_0007_EBX_OVERFLOW_RECOV | CPUID_8000_0007_EBX_SUCCOR);
> } else if (function == KVM_CPUID_FEATURES && reg == R_EAX) {
> /* kvm_pv_unhalt is reported by GET_SUPPORTED_CPUID, but it can't
> * be enabled without the in-kernel irqchip
>
> Thanks,
> Zhao
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits
2025-02-25 17:01 ` John Allen
@ 2025-02-26 20:28 ` Moger, Babu
2025-02-27 6:42 ` Zhao Liu
0 siblings, 1 reply; 21+ messages in thread
From: Moger, Babu @ 2025-02-26 20:28 UTC (permalink / raw)
To: John Allen, Zhao Liu; +Cc: pbonzini, qemu-devel, kvm, davydov-max, Joao Martins
Hi John,
On 2/25/25 11:01, John Allen wrote:
> On Thu, Feb 20, 2025 at 06:59:34PM +0800, Zhao Liu wrote:
>> And one more thing :-) ...
>>
>>> static const CPUCaches epyc_rome_cache_info = {
>>> .l1d_cache = &(CPUCacheInfo) {
>>> .type = DATA_CACHE,
>>> @@ -5207,6 +5261,25 @@ static const X86CPUDefinition builtin_x86_defs[] = {
>>> },
>>> .cache_info = &epyc_v4_cache_info
>>> },
>>> + {
>>> + .version = 5,
>>> + .props = (PropValue[]) {
>>> + { "overflow-recov", "on" },
>>> + { "succor", "on" },
>>
>> When I checks the "overflow-recov" and "succor" enabling, I find these 2
>> bits are set unconditionally.
>>
>> I'm not sure if all AMD platforms support both bits, do you think it's
>> necessary to check the host support?
>
> Hi Zhao,
>
> IIRC, we intentionally set these unconditionally since there is no
> specific support needed from the host side for guests to use these bits
> to handle MCEs. See the original discussion and rationale in this
> thread:
>
> https://lore.kernel.org/all/20230706194022.2485195-2-john.allen@amd.com/
>
> However, this discussion only applied to the SUCCOR feature and not the
> OVERFLOW_RECOV feature and now that you bring it up, I'm second guessing
> whether we can apply the same thinking to OVERFLOW_RECOV. I think we may
> want to keep setting the SUCCOR bit unconditionally, but we may want to
> handle OVERFLOW_RECOV normally. I'll have to track down some old
> hardware to see how this behaves when the hardware doesn't support it.
Yes. We need to verify it on pre-EPYC hardware. Please let us know how it
goes.
But, this series updates only the EPYC based CPU models. It should not be
a concern here. Right?
>
> Thanks,
> John
>
>>
>> diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c
>> index 6c749d4ee812..03e463076632 100644
>> --- a/target/i386/kvm/kvm.c
>> +++ b/target/i386/kvm/kvm.c
>> @@ -555,7 +555,10 @@ uint32_t kvm_arch_get_supported_cpuid(KVMState *s, uint32_t function,
>> cpuid_1_edx = kvm_arch_get_supported_cpuid(s, 1, 0, R_EDX);
>> ret |= cpuid_1_edx & CPUID_EXT2_AMD_ALIASES;
>> } else if (function == 0x80000007 && reg == R_EBX) {
>> - ret |= CPUID_8000_0007_EBX_OVERFLOW_RECOV | CPUID_8000_0007_EBX_SUCCOR;
>> + uint32_t ebx;
>> + host_cpuid(0x80000007, 0, &unused, &ebx, &unused, &unused);
>> +
>> + ret |= ebx & (CPUID_8000_0007_EBX_OVERFLOW_RECOV | CPUID_8000_0007_EBX_SUCCOR);
>> } else if (function == KVM_CPUID_FEATURES && reg == R_EAX) {
>> /* kvm_pv_unhalt is reported by GET_SUPPORTED_CPUID, but it can't
>> * be enabled without the in-kernel irqchip
>>
>> Thanks,
>> Zhao
>>
>>
>
--
Thanks
Babu Moger
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits
2025-02-26 20:28 ` Moger, Babu
@ 2025-02-27 6:42 ` Zhao Liu
0 siblings, 0 replies; 21+ messages in thread
From: Zhao Liu @ 2025-02-27 6:42 UTC (permalink / raw)
To: Moger, Babu
Cc: John Allen, pbonzini, qemu-devel, kvm, davydov-max, Joao Martins
On Wed, Feb 26, 2025 at 02:28:35PM -0600, Moger, Babu wrote:
> Date: Wed, 26 Feb 2025 14:28:35 -0600
> From: "Moger, Babu" <babu.moger@amd.com>
> Subject: Re: [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache
> property, RAS, SVM feature bits
>
> Hi John,
>
> On 2/25/25 11:01, John Allen wrote:
> > On Thu, Feb 20, 2025 at 06:59:34PM +0800, Zhao Liu wrote:
> >> And one more thing :-) ...
> >>
> >>> static const CPUCaches epyc_rome_cache_info = {
> >>> .l1d_cache = &(CPUCacheInfo) {
> >>> .type = DATA_CACHE,
> >>> @@ -5207,6 +5261,25 @@ static const X86CPUDefinition builtin_x86_defs[] = {
> >>> },
> >>> .cache_info = &epyc_v4_cache_info
> >>> },
> >>> + {
> >>> + .version = 5,
> >>> + .props = (PropValue[]) {
> >>> + { "overflow-recov", "on" },
> >>> + { "succor", "on" },
> >>
> >> When I checks the "overflow-recov" and "succor" enabling, I find these 2
> >> bits are set unconditionally.
> >>
> >> I'm not sure if all AMD platforms support both bits, do you think it's
> >> necessary to check the host support?
> >
> > Hi Zhao,
> >
> > IIRC, we intentionally set these unconditionally since there is no
> > specific support needed from the host side for guests to use these bits
> > to handle MCEs. See the original discussion and rationale in this
> > thread:
> >
> > https://lore.kernel.org/all/20230706194022.2485195-2-john.allen@amd.com/
> >
> > However, this discussion only applied to the SUCCOR feature and not the
> > OVERFLOW_RECOV feature and now that you bring it up, I'm second guessing
> > whether we can apply the same thinking to OVERFLOW_RECOV. I think we may
> > want to keep setting the SUCCOR bit unconditionally, but we may want to
> > handle OVERFLOW_RECOV normally. I'll have to track down some old
> > hardware to see how this behaves when the hardware doesn't support it.
Yes, thanks!
> Yes. We need to verify it on pre-EPYC hardware. Please let us know how it
> goes.
>
> But, this series updates only the EPYC based CPU models. It should not be
> a concern here. Right?
Yes, it doesn't block this series. :-)
Thank you both,
Zhao
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v5 2/6] target/i386: Update EPYC-Rome CPU model for Cache property, RAS, SVM feature bits
2025-02-06 19:28 [PATCH v5 0/6] target/i386: Update EPYC CPU models for Cache property, RAS, SVM feature and add EPYC-Turin CPU model Babu Moger
2025-02-06 19:28 ` [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits Babu Moger
@ 2025-02-06 19:28 ` Babu Moger
2025-02-20 11:18 ` Zhao Liu
2025-02-06 19:28 ` [PATCH v5 3/6] target/i386: Update EPYC-Milan " Babu Moger
` (3 subsequent siblings)
5 siblings, 1 reply; 21+ messages in thread
From: Babu Moger @ 2025-02-06 19:28 UTC (permalink / raw)
To: pbonzini; +Cc: zhao1.liu, qemu-devel, kvm, davydov-max
Found that some of the cache properties are not set correctly for EPYC models.
l1d_cache.no_invd_sharing should not be true.
l1i_cache.no_invd_sharing should not be true.
L2.self_init should be true.
L2.inclusive should be true.
L3.inclusive should not be true.
L3.no_invd_sharing should be true.
Fix these cache properties.
Also add the missing RAS and SVM features bits on AMD EPYC-Rome. The SVM
feature bits are used in nested guests.
succor : Software uncorrectable error containment and recovery capability.
overflow-recov : MCA overflow recovery support.
lbrv : LBR virtualization
tsc-scale : MSR based TSC rate control
vmcb-clean : VMCB clean bits
flushbyasid : Flush by ASID
pause-filter : Pause intercept filter
pfthreshold : PAUSE filter threshold
v-vmsave-vmload : Virtualized VMLOAD and VMSAVE
vgif : Virtualized GIF
Signed-off-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
---
target/i386/cpu.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 94292bfaa2..e2c3c797ed 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2342,6 +2342,60 @@ static const CPUCaches epyc_rome_v3_cache_info = {
},
};
+static const CPUCaches epyc_rome_v5_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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .l2_cache = &(CPUCacheInfo) {
+ .type = UNIFIED_CACHE,
+ .level = 2,
+ .size = 512 * KiB,
+ .line_size = 64,
+ .associativity = 8,
+ .partitions = 1,
+ .sets = 1024,
+ .lines_per_tag = 1,
+ .self_init = true,
+ .inclusive = true,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .no_invd_sharing = true,
+ .complex_indexing = false,
+ .share_level = CPU_TOPOLOGY_LEVEL_DIE,
+ },
+};
+
static const CPUCaches epyc_milan_cache_info = {
.l1d_cache = &(CPUCacheInfo) {
.type = DATA_CACHE,
@@ -5418,6 +5472,25 @@ static const X86CPUDefinition builtin_x86_defs[] = {
{ /* end of list */ }
},
},
+ {
+ .version = 5,
+ .props = (PropValue[]) {
+ { "overflow-recov", "on" },
+ { "succor", "on" },
+ { "lbrv", "on" },
+ { "tsc-scale", "on" },
+ { "vmcb-clean", "on" },
+ { "flushbyasid", "on" },
+ { "pause-filter", "on" },
+ { "pfthreshold", "on" },
+ { "v-vmsave-vmload", "on" },
+ { "vgif", "on" },
+ { "model-id",
+ "AMD EPYC-Rome-v5 Processor" },
+ { /* end of list */ }
+ },
+ .cache_info = &epyc_rome_v5_cache_info
+ },
{ /* end of list */ }
}
},
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v5 2/6] target/i386: Update EPYC-Rome CPU model for Cache property, RAS, SVM feature bits
2025-02-06 19:28 ` [PATCH v5 2/6] target/i386: Update EPYC-Rome " Babu Moger
@ 2025-02-20 11:18 ` Zhao Liu
2025-02-21 0:41 ` Moger, Babu
0 siblings, 1 reply; 21+ messages in thread
From: Zhao Liu @ 2025-02-20 11:18 UTC (permalink / raw)
To: Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
On Thu, Feb 06, 2025 at 01:28:35PM -0600, Babu Moger wrote:
> Date: Thu, 6 Feb 2025 13:28:35 -0600
> From: Babu Moger <babu.moger@amd.com>
> Subject: [PATCH v5 2/6] target/i386: Update EPYC-Rome CPU model for Cache
> property, RAS, SVM feature bits
> X-Mailer: git-send-email 2.34.1
>
> Found that some of the cache properties are not set correctly for EPYC models.
>
> l1d_cache.no_invd_sharing should not be true.
> l1i_cache.no_invd_sharing should not be true.
>
> L2.self_init should be true.
> L2.inclusive should be true.
>
> L3.inclusive should not be true.
> L3.no_invd_sharing should be true.
>
> Fix these cache properties.
>
> Also add the missing RAS and SVM features bits on AMD EPYC-Rome. The SVM
> feature bits are used in nested guests.
>
> succor : Software uncorrectable error containment and recovery capability.
> overflow-recov : MCA overflow recovery support.
> lbrv : LBR virtualization
> tsc-scale : MSR based TSC rate control
> vmcb-clean : VMCB clean bits
> flushbyasid : Flush by ASID
> pause-filter : Pause intercept filter
> pfthreshold : PAUSE filter threshold
> v-vmsave-vmload : Virtualized VMLOAD and VMSAVE
> vgif : Virtualized GIF
>
> Signed-off-by: Babu Moger <babu.moger@amd.com>
> Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
> ---
> target/i386/cpu.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 73 insertions(+)
>
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 94292bfaa2..e2c3c797ed 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -2342,6 +2342,60 @@ static const CPUCaches epyc_rome_v3_cache_info = {
> },
> };
>
> +static const CPUCaches epyc_rome_v5_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,
This field could be true,
> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> + },
> + .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,
ditto,
Compared to the previous cache model version, the differences can be
checked. I feel that in the future, when we introduce a new cache model,
it's better to avoid omitting items that default to false. This way, the
cache model can correspond to the output of the cpuid tool, making it
easier to compare and check.
Overall, LGTM,
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v5 2/6] target/i386: Update EPYC-Rome CPU model for Cache property, RAS, SVM feature bits
2025-02-20 11:18 ` Zhao Liu
@ 2025-02-21 0:41 ` Moger, Babu
0 siblings, 0 replies; 21+ messages in thread
From: Moger, Babu @ 2025-02-21 0:41 UTC (permalink / raw)
To: Zhao Liu, Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
Hi Zhao,
On 2/20/2025 5:18 AM, Zhao Liu wrote:
> On Thu, Feb 06, 2025 at 01:28:35PM -0600, Babu Moger wrote:
>> Date: Thu, 6 Feb 2025 13:28:35 -0600
>> From: Babu Moger <babu.moger@amd.com>
>> Subject: [PATCH v5 2/6] target/i386: Update EPYC-Rome CPU model for Cache
>> property, RAS, SVM feature bits
>> X-Mailer: git-send-email 2.34.1
>>
>> Found that some of the cache properties are not set correctly for EPYC models.
>>
>> l1d_cache.no_invd_sharing should not be true.
>> l1i_cache.no_invd_sharing should not be true.
>>
>> L2.self_init should be true.
>> L2.inclusive should be true.
>>
>> L3.inclusive should not be true.
>> L3.no_invd_sharing should be true.
>>
>> Fix these cache properties.
>>
>> Also add the missing RAS and SVM features bits on AMD EPYC-Rome. The SVM
>> feature bits are used in nested guests.
>>
>> succor : Software uncorrectable error containment and recovery capability.
>> overflow-recov : MCA overflow recovery support.
>> lbrv : LBR virtualization
>> tsc-scale : MSR based TSC rate control
>> vmcb-clean : VMCB clean bits
>> flushbyasid : Flush by ASID
>> pause-filter : Pause intercept filter
>> pfthreshold : PAUSE filter threshold
>> v-vmsave-vmload : Virtualized VMLOAD and VMSAVE
>> vgif : Virtualized GIF
>>
>> Signed-off-by: Babu Moger <babu.moger@amd.com>
>> Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
>> ---
>> target/i386/cpu.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++
>> 1 file changed, 73 insertions(+)
>>
>> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
>> index 94292bfaa2..e2c3c797ed 100644
>> --- a/target/i386/cpu.c
>> +++ b/target/i386/cpu.c
>> @@ -2342,6 +2342,60 @@ static const CPUCaches epyc_rome_v3_cache_info = {
>> },
>> };
>>
>> +static const CPUCaches epyc_rome_v5_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,
>
> This field could be true,
Sure.
>
>> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
>> + },
>> + .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,
>
> ditto,
Sure.
>
> Compared to the previous cache model version, the differences can be
> checked. I feel that in the future, when we introduce a new cache model,
> it's better to avoid omitting items that default to false. This way, the
> cache model can correspond to the output of the cpuid tool, making it
> easier to compare and check.
Sounds good.
>
> Overall, LGTM,
>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>
>
Thanks
Babu
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v5 3/6] target/i386: Update EPYC-Milan CPU model for Cache property, RAS, SVM feature bits
2025-02-06 19:28 [PATCH v5 0/6] target/i386: Update EPYC CPU models for Cache property, RAS, SVM feature and add EPYC-Turin CPU model Babu Moger
2025-02-06 19:28 ` [PATCH v5 1/6] target/i386: Update EPYC CPU model for Cache property, RAS, SVM feature bits Babu Moger
2025-02-06 19:28 ` [PATCH v5 2/6] target/i386: Update EPYC-Rome " Babu Moger
@ 2025-02-06 19:28 ` Babu Moger
2025-02-20 11:26 ` Zhao Liu
2025-02-06 19:28 ` [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to BASE reg is non-serializing Babu Moger
` (2 subsequent siblings)
5 siblings, 1 reply; 21+ messages in thread
From: Babu Moger @ 2025-02-06 19:28 UTC (permalink / raw)
To: pbonzini; +Cc: zhao1.liu, qemu-devel, kvm, davydov-max
Found that some of the cache properties are not set correctly for EPYC models.
l1d_cache.no_invd_sharing should not be true.
l1i_cache.no_invd_sharing should not be true.
L2.self_init should be true.
L2.inclusive should be true.
L3.inclusive should not be true.
L3.no_invd_sharing should be true.
Fix these cache properties.
Also add the missing RAS and SVM features bits on AMD EPYC-Milan model.
The SVM feature bits are used in nested guests.
succor : Software uncorrectable error containment and recovery capability.
overflow-recov : MCA overflow recovery support.
lbrv : LBR virtualization
tsc-scale : MSR based TSC rate control
vmcb-clean : VMCB clean bits
flushbyasid : Flush by ASID
pause-filter : Pause intercept filter
pfthreshold : PAUSE filter threshold
v-vmsave-vmload : Virtualized VMLOAD and VMSAVE
vgif : Virtualized GIF
Signed-off-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
---
target/i386/cpu.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index e2c3c797ed..7d18557877 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2504,6 +2504,60 @@ static const CPUCaches epyc_milan_v2_cache_info = {
},
};
+static const CPUCaches epyc_milan_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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .l2_cache = &(CPUCacheInfo) {
+ .type = UNIFIED_CACHE,
+ .level = 2,
+ .size = 512 * KiB,
+ .line_size = 64,
+ .associativity = 8,
+ .partitions = 1,
+ .sets = 1024,
+ .lines_per_tag = 1,
+ .self_init = true,
+ .inclusive = true,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .no_invd_sharing = true,
+ .complex_indexing = false,
+ .share_level = CPU_TOPOLOGY_LEVEL_DIE,
+ },
+};
+
static const CPUCaches epyc_genoa_cache_info = {
.l1d_cache = &(CPUCacheInfo) {
.type = DATA_CACHE,
@@ -5566,6 +5620,25 @@ static const X86CPUDefinition builtin_x86_defs[] = {
},
.cache_info = &epyc_milan_v2_cache_info
},
+ {
+ .version = 3,
+ .props = (PropValue[]) {
+ { "overflow-recov", "on" },
+ { "succor", "on" },
+ { "lbrv", "on" },
+ { "tsc-scale", "on" },
+ { "vmcb-clean", "on" },
+ { "flushbyasid", "on" },
+ { "pause-filter", "on" },
+ { "pfthreshold", "on" },
+ { "v-vmsave-vmload", "on" },
+ { "vgif", "on" },
+ { "model-id",
+ "AMD EPYC-Milan-v3 Processor" },
+ { /* end of list */ }
+ },
+ .cache_info = &epyc_milan_v3_cache_info
+ },
{ /* end of list */ }
}
},
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v5 3/6] target/i386: Update EPYC-Milan CPU model for Cache property, RAS, SVM feature bits
2025-02-06 19:28 ` [PATCH v5 3/6] target/i386: Update EPYC-Milan " Babu Moger
@ 2025-02-20 11:26 ` Zhao Liu
2025-02-21 0:43 ` Moger, Babu
0 siblings, 1 reply; 21+ messages in thread
From: Zhao Liu @ 2025-02-20 11:26 UTC (permalink / raw)
To: Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
> +static const CPUCaches epyc_milan_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,
true.
> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> + },
> + .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,
true.
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v5 3/6] target/i386: Update EPYC-Milan CPU model for Cache property, RAS, SVM feature bits
2025-02-20 11:26 ` Zhao Liu
@ 2025-02-21 0:43 ` Moger, Babu
0 siblings, 0 replies; 21+ messages in thread
From: Moger, Babu @ 2025-02-21 0:43 UTC (permalink / raw)
To: Zhao Liu, Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
Hi Zhao,
On 2/20/2025 5:26 AM, Zhao Liu wrote:
>> +static const CPUCaches epyc_milan_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,
>
> true.
Sure.
>
>> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
>> + },
>> + .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,
>
> true.
Sure.
>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>
>
Thanks
Babu
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to BASE reg is non-serializing
2025-02-06 19:28 [PATCH v5 0/6] target/i386: Update EPYC CPU models for Cache property, RAS, SVM feature and add EPYC-Turin CPU model Babu Moger
` (2 preceding siblings ...)
2025-02-06 19:28 ` [PATCH v5 3/6] target/i386: Update EPYC-Milan " Babu Moger
@ 2025-02-06 19:28 ` Babu Moger
2025-02-20 12:00 ` Zhao Liu
2025-02-06 19:28 ` [PATCH v5 5/6] target/i386: Update EPYC-Genoa for Cache property, perfmon-v2, RAS and SVM feature bits Babu Moger
2025-02-06 19:28 ` [PATCH v5 6/6] target/i386: Add support for EPYC-Turin model Babu Moger
5 siblings, 1 reply; 21+ messages in thread
From: Babu Moger @ 2025-02-06 19:28 UTC (permalink / raw)
To: pbonzini; +Cc: zhao1.liu, qemu-devel, kvm, davydov-max
Add the CPUID bit indicates that a WRMSR to MSR_FS_BASE, MSR_GS_BASE, or
MSR_KERNEL_GS_BASE is non-serializing.
CPUID_Fn80000021_EAX
Bit Feature description
1 FsGsKernelGsBaseNonSerializing.
WRMSR to FS_BASE, GS_BASE and KernelGSbase are non-serializing.
Link: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/57238.zip
Signed-off-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
---
target/i386/cpu.c | 2 +-
target/i386/cpu.h | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 7d18557877..710b862eec 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -1234,7 +1234,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
[FEAT_8000_0021_EAX] = {
.type = CPUID_FEATURE_WORD,
.feat_names = {
- "no-nested-data-bp", NULL, "lfence-always-serializing", NULL,
+ "no-nested-data-bp", "fs-gs-base-ns", "lfence-always-serializing", NULL,
NULL, NULL, "null-sel-clr-base", NULL,
"auto-ibrs", NULL, NULL, NULL,
NULL, NULL, NULL, NULL,
diff --git a/target/i386/cpu.h b/target/i386/cpu.h
index c67b42d34f..968b4fd99b 100644
--- a/target/i386/cpu.h
+++ b/target/i386/cpu.h
@@ -1074,6 +1074,8 @@ uint64_t x86_cpu_get_supported_feature_word(X86CPU *cpu, FeatureWord w);
/* Processor ignores nested data breakpoints */
#define CPUID_8000_0021_EAX_NO_NESTED_DATA_BP (1U << 0)
+/* WRMSR to FS_BASE, GS_BASE, or KERNEL_GS_BASE is non-serializing */
+#define CPUID_8000_0021_EAX_FS_GS_BASE_NS (1U << 1)
/* LFENCE is always serializing */
#define CPUID_8000_0021_EAX_LFENCE_ALWAYS_SERIALIZING (1U << 2)
/* Null Selector Clears Base */
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to BASE reg is non-serializing
2025-02-06 19:28 ` [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to BASE reg is non-serializing Babu Moger
@ 2025-02-20 12:00 ` Zhao Liu
2025-02-21 0:45 ` Moger, Babu
0 siblings, 1 reply; 21+ messages in thread
From: Zhao Liu @ 2025-02-20 12:00 UTC (permalink / raw)
To: Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
On Thu, Feb 06, 2025 at 01:28:37PM -0600, Babu Moger wrote:
> Date: Thu, 6 Feb 2025 13:28:37 -0600
> From: Babu Moger <babu.moger@amd.com>
> Subject: [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to
> BASE reg is non-serializing
> X-Mailer: git-send-email 2.34.1
>
> Add the CPUID bit indicates that a WRMSR to MSR_FS_BASE, MSR_GS_BASE, or
> MSR_KERNEL_GS_BASE is non-serializing.
>
> CPUID_Fn80000021_EAX
> Bit Feature description
> 1 FsGsKernelGsBaseNonSerializing.
> WRMSR to FS_BASE, GS_BASE and KernelGSbase are non-serializing.
>
> Link: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/57238.zip
> Signed-off-by: Babu Moger <babu.moger@amd.com>
> Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
> ---
> target/i386/cpu.c | 2 +-
> target/i386/cpu.h | 2 ++
> 2 files changed, 3 insertions(+), 1 deletion(-)
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to BASE reg is non-serializing
2025-02-20 12:00 ` Zhao Liu
@ 2025-02-21 0:45 ` Moger, Babu
0 siblings, 0 replies; 21+ messages in thread
From: Moger, Babu @ 2025-02-21 0:45 UTC (permalink / raw)
To: Zhao Liu, Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
Hi Zhao,
On 2/20/2025 6:00 AM, Zhao Liu wrote:
> On Thu, Feb 06, 2025 at 01:28:37PM -0600, Babu Moger wrote:
>> Date: Thu, 6 Feb 2025 13:28:37 -0600
>> From: Babu Moger <babu.moger@amd.com>
>> Subject: [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to
>> BASE reg is non-serializing
>> X-Mailer: git-send-email 2.34.1
>>
>> Add the CPUID bit indicates that a WRMSR to MSR_FS_BASE, MSR_GS_BASE, or
>> MSR_KERNEL_GS_BASE is non-serializing.
>>
>> CPUID_Fn80000021_EAX
>> Bit Feature description
>> 1 FsGsKernelGsBaseNonSerializing.
>> WRMSR to FS_BASE, GS_BASE and KernelGSbase are non-serializing.
>>
>> Link: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/57238.zip
>> Signed-off-by: Babu Moger <babu.moger@amd.com>
>> Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
>> ---
>> target/i386/cpu.c | 2 +-
>> target/i386/cpu.h | 2 ++
>> 2 files changed, 3 insertions(+), 1 deletion(-)
>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>
Thank you,
Babu
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v5 5/6] target/i386: Update EPYC-Genoa for Cache property, perfmon-v2, RAS and SVM feature bits
2025-02-06 19:28 [PATCH v5 0/6] target/i386: Update EPYC CPU models for Cache property, RAS, SVM feature and add EPYC-Turin CPU model Babu Moger
` (3 preceding siblings ...)
2025-02-06 19:28 ` [PATCH v5 4/6] target/i386: Add feature that indicates WRMSR to BASE reg is non-serializing Babu Moger
@ 2025-02-06 19:28 ` Babu Moger
2025-02-20 12:05 ` Zhao Liu
2025-02-06 19:28 ` [PATCH v5 6/6] target/i386: Add support for EPYC-Turin model Babu Moger
5 siblings, 1 reply; 21+ messages in thread
From: Babu Moger @ 2025-02-06 19:28 UTC (permalink / raw)
To: pbonzini; +Cc: zhao1.liu, qemu-devel, kvm, davydov-max
Found that some of the cache properties are not set correctly for EPYC models.
l1d_cache.no_invd_sharing should not be true.
l1i_cache.no_invd_sharing should not be true.
L2.self_init should be true.
L2.inclusive should be true.
L3.inclusive should not be true.
L3.no_invd_sharing should be true.
Fix these cache properties.
Also add the missing RAS and SVM features bits on AMD EPYC-Genoa model.
The SVM feature bits are used in nested guests.
perfmon-v2 : Allow guests to make use of the PerfMonV2 features.
succor : Software uncorrectable error containment and recovery capability.
overflow-recov : MCA overflow recovery support.
lbrv : LBR virtualization
tsc-scale : MSR based TSC rate control
vmcb-clean : VMCB clean bits
flushbyasid : Flush by ASID
pause-filter : Pause intercept filter
pfthreshold : PAUSE filter threshold
v-vmsave-vmload: Virtualized VMLOAD and VMSAVE
vgif : Virtualized GIF
fs-gs-base-ns : WRMSR to {FS,GS,KERNEL_GS}_BASE is non-serializing
The feature details are available in APM listed below [1].
[1] AMD64 Architecture Programmer's Manual Volume 2: System Programming
Publication # 24593 Revision 3.41.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=206537
Signed-off-by: Babu Moger <babu.moger@amd.com>
Reviewed-by: Maksim Davydov <davydov-max@yandex-team.ru>
---
target/i386/cpu.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 78 insertions(+)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 710b862eec..3b6a630b65 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2612,6 +2612,59 @@ static const CPUCaches epyc_genoa_cache_info = {
},
};
+static const CPUCaches epyc_genoa_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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .l2_cache = &(CPUCacheInfo) {
+ .type = UNIFIED_CACHE,
+ .level = 2,
+ .size = 1 * MiB,
+ .line_size = 64,
+ .associativity = 8,
+ .partitions = 1,
+ .sets = 2048,
+ .lines_per_tag = 1,
+ .self_init = true,
+ .inclusive = true,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .no_invd_sharing = true,
+ .complex_indexing = false,
+ .share_level = CPU_TOPOLOGY_LEVEL_DIE,
+ },
+};
/* The following VMX features are not supported by KVM and are left out in the
* CPU definitions:
*
@@ -5713,6 +5766,31 @@ static const X86CPUDefinition builtin_x86_defs[] = {
.xlevel = 0x80000022,
.model_id = "AMD EPYC-Genoa Processor",
.cache_info = &epyc_genoa_cache_info,
+ .versions = (X86CPUVersionDefinition[]) {
+ { .version = 1 },
+ {
+ .version = 2,
+ .props = (PropValue[]) {
+ { "overflow-recov", "on" },
+ { "succor", "on" },
+ { "lbrv", "on" },
+ { "tsc-scale", "on" },
+ { "vmcb-clean", "on" },
+ { "flushbyasid", "on" },
+ { "pause-filter", "on" },
+ { "pfthreshold", "on" },
+ { "v-vmsave-vmload", "on" },
+ { "vgif", "on" },
+ { "fs-gs-base-ns", "on" },
+ { "perfmon-v2", "on" },
+ { "model-id",
+ "AMD EPYC-Genoa-v2 Processor" },
+ { /* end of list */ }
+ },
+ .cache_info = &epyc_genoa_v2_cache_info
+ },
+ { /* end of list */ }
+ }
},
};
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v5 5/6] target/i386: Update EPYC-Genoa for Cache property, perfmon-v2, RAS and SVM feature bits
2025-02-06 19:28 ` [PATCH v5 5/6] target/i386: Update EPYC-Genoa for Cache property, perfmon-v2, RAS and SVM feature bits Babu Moger
@ 2025-02-20 12:05 ` Zhao Liu
2025-02-21 0:46 ` Moger, Babu
0 siblings, 1 reply; 21+ messages in thread
From: Zhao Liu @ 2025-02-20 12:05 UTC (permalink / raw)
To: Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
> +static const CPUCaches epyc_genoa_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,
true.
> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> + },
> + .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,
true.
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v5 5/6] target/i386: Update EPYC-Genoa for Cache property, perfmon-v2, RAS and SVM feature bits
2025-02-20 12:05 ` Zhao Liu
@ 2025-02-21 0:46 ` Moger, Babu
0 siblings, 0 replies; 21+ messages in thread
From: Moger, Babu @ 2025-02-21 0:46 UTC (permalink / raw)
To: Zhao Liu, Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
Hi Zhao,
On 2/20/2025 6:05 AM, Zhao Liu wrote:
>> +static const CPUCaches epyc_genoa_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,
>
> true.
Sure.
>
>> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
>> + },
>> + .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,
>
> true.
Sure.
>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
>
>
Thanks
Babu
^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v5 6/6] target/i386: Add support for EPYC-Turin model
2025-02-06 19:28 [PATCH v5 0/6] target/i386: Update EPYC CPU models for Cache property, RAS, SVM feature and add EPYC-Turin CPU model Babu Moger
` (4 preceding siblings ...)
2025-02-06 19:28 ` [PATCH v5 5/6] target/i386: Update EPYC-Genoa for Cache property, perfmon-v2, RAS and SVM feature bits Babu Moger
@ 2025-02-06 19:28 ` Babu Moger
2025-02-20 12:11 ` Zhao Liu
5 siblings, 1 reply; 21+ messages in thread
From: Babu Moger @ 2025-02-06 19:28 UTC (permalink / raw)
To: pbonzini; +Cc: zhao1.liu, qemu-devel, kvm, davydov-max
Add the support for AMD EPYC zen 5 processors (EPYC-Turin).
Add the following new feature bits on top of the feature bits from
the previous generation EPYC models.
movdiri : Move Doubleword as Direct Store Instruction
movdir64b : Move 64 Bytes as Direct Store Instruction
avx512-vp2intersect : AVX512 Vector Pair Intersection to a Pair
of Mask Register
avx-vnni : AVX VNNI Instruction
sbpb : Selective Branch Predictor Barrier
ibpb-brtype : IBPB includes branch type prediction flushing
srso-user-kernel-no : Not vulnerable to SRSO at the user-kernel boundary
Link: https://www.amd.com/content/dam/amd/en/documents/epyc-technical-docs/programmer-references/57238.zip
Link: https://www.amd.com/content/dam/amd/en/documents/corporate/cr/speculative-return-stack-overflow-whitepaper.pdf
Signed-off-by: Babu Moger <babu.moger@amd.com>
---
target/i386/cpu.c | 138 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 138 insertions(+)
diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 3b6a630b65..b0ab493cd6 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -2665,6 +2665,61 @@ static const CPUCaches epyc_genoa_v2_cache_info = {
.share_level = CPU_TOPOLOGY_LEVEL_DIE,
},
};
+
+static const CPUCaches epyc_turin_cache_info = {
+ .l1d_cache = &(CPUCacheInfo) {
+ .type = DATA_CACHE,
+ .level = 1,
+ .size = 48 * KiB,
+ .line_size = 64,
+ .associativity = 12,
+ .partitions = 1,
+ .sets = 64,
+ .lines_per_tag = 1,
+ .self_init = 1,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .l2_cache = &(CPUCacheInfo) {
+ .type = UNIFIED_CACHE,
+ .level = 2,
+ .size = 1 * MiB,
+ .line_size = 64,
+ .associativity = 16,
+ .partitions = 1,
+ .sets = 1024,
+ .lines_per_tag = 1,
+ .self_init = true,
+ .inclusive = true,
+ .share_level = CPU_TOPOLOGY_LEVEL_CORE,
+ },
+ .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,
+ .no_invd_sharing = true,
+ .complex_indexing = false,
+ .share_level = CPU_TOPOLOGY_LEVEL_DIE,
+ },
+};
+
/* The following VMX features are not supported by KVM and are left out in the
* CPU definitions:
*
@@ -5792,6 +5847,89 @@ static const X86CPUDefinition builtin_x86_defs[] = {
{ /* end of list */ }
}
},
+ {
+ .name = "EPYC-Turin",
+ .level = 0xd,
+ .vendor = CPUID_VENDOR_AMD,
+ .family = 26,
+ .model = 0,
+ .stepping = 0,
+ .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_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_6_EAX] =
+ CPUID_6_EAX_ARAT,
+ .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 | CPUID_7_0_ECX_MOVDIRI |
+ CPUID_7_0_ECX_MOVDIR64B,
+ .features[FEAT_7_0_EDX] =
+ CPUID_7_0_EDX_FSRM | CPUID_7_0_EDX_AVX512_VP2INTERSECT,
+ .features[FEAT_7_1_EAX] =
+ CPUID_7_1_EAX_AVX_VNNI | CPUID_7_1_EAX_AVX512_BF16,
+ .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_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_0007_EBX] =
+ CPUID_8000_0007_EBX_OVERFLOW_RECOV | CPUID_8000_0007_EBX_SUCCOR,
+ .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_FS_GS_BASE_NS |
+ CPUID_8000_0021_EAX_LFENCE_ALWAYS_SERIALIZING |
+ CPUID_8000_0021_EAX_NULL_SEL_CLR_BASE |
+ CPUID_8000_0021_EAX_AUTO_IBRS | CPUID_8000_0021_EAX_SBPB |
+ CPUID_8000_0021_EAX_IBPB_BRTYPE |
+ CPUID_8000_0021_EAX_SRSO_USER_KERNEL_NO,
+ .features[FEAT_8000_0022_EAX] =
+ CPUID_8000_0022_EAX_PERFMON_V2,
+ .features[FEAT_XSAVE] =
+ CPUID_XSAVE_XSAVEOPT | CPUID_XSAVE_XSAVEC |
+ CPUID_XSAVE_XGETBV1 | CPUID_XSAVE_XSAVES,
+ .features[FEAT_SVM] =
+ CPUID_SVM_NPT | CPUID_SVM_LBRV | CPUID_SVM_NRIPSAVE |
+ CPUID_SVM_TSCSCALE | CPUID_SVM_VMCBCLEAN | CPUID_SVM_FLUSHASID |
+ CPUID_SVM_PAUSEFILTER | CPUID_SVM_PFTHRESHOLD |
+ CPUID_SVM_V_VMSAVE_VMLOAD | CPUID_SVM_VGIF |
+ CPUID_SVM_VNMI | CPUID_SVM_SVME_ADDR_CHK,
+ .xlevel = 0x80000022,
+ .model_id = "AMD EPYC-Turin Processor",
+ .cache_info = &epyc_turin_cache_info,
+ },
};
/*
--
2.34.1
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v5 6/6] target/i386: Add support for EPYC-Turin model
2025-02-06 19:28 ` [PATCH v5 6/6] target/i386: Add support for EPYC-Turin model Babu Moger
@ 2025-02-20 12:11 ` Zhao Liu
2025-02-21 0:48 ` Moger, Babu
0 siblings, 1 reply; 21+ messages in thread
From: Zhao Liu @ 2025-02-20 12:11 UTC (permalink / raw)
To: Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
> +static const CPUCaches epyc_turin_cache_info = {
> + .l1d_cache = &(CPUCacheInfo) {
> + .type = DATA_CACHE,
> + .level = 1,
> + .size = 48 * KiB,
> + .line_size = 64,
> + .associativity = 12,
> + .partitions = 1,
> + .sets = 64,
> + .lines_per_tag = 1,
> + .self_init = 1,
true.
> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> + },
> + .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,
true.
Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
(And it would be better to add a Turin entry in docs/system/cpu-models-x86.rst.inc
later :-).)
Thanks,
Zhao
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v5 6/6] target/i386: Add support for EPYC-Turin model
2025-02-20 12:11 ` Zhao Liu
@ 2025-02-21 0:48 ` Moger, Babu
0 siblings, 0 replies; 21+ messages in thread
From: Moger, Babu @ 2025-02-21 0:48 UTC (permalink / raw)
To: Zhao Liu, Babu Moger; +Cc: pbonzini, qemu-devel, kvm, davydov-max
Hi Zhao,
On 2/20/2025 6:11 AM, Zhao Liu wrote:
>> +static const CPUCaches epyc_turin_cache_info = {
>> + .l1d_cache = &(CPUCacheInfo) {
>> + .type = DATA_CACHE,
>> + .level = 1,
>> + .size = 48 * KiB,
>> + .line_size = 64,
>> + .associativity = 12,
>> + .partitions = 1,
>> + .sets = 64,
>> + .lines_per_tag = 1,
>> + .self_init = 1,
>
> true.
Sure.
>
>> + .share_level = CPU_TOPOLOGY_LEVEL_CORE,
>> + },
>> + .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,
>
> true.
Sure.
>
> Reviewed-by: Zhao Liu <zhao1.liu@intel.com>
thanks
>
> (And it would be better to add a Turin entry in docs/system/cpu-models-x86.rst.inc
> later :-).)
Yes. Will add a new patch to update docs/system/cpu-models-x86.rst.inc.
>
> Thanks,
> Zhao
>
>
>
^ permalink raw reply [flat|nested] 21+ messages in thread