On 6/20/2025 5:27 PM, Zhao Liu wrote:
> Based on legacy_l1d_cache, legacy_l1i_cache, legacy_l2_cache and
> legacy_l3_cache, build a complete legacy intel cache model, which can
> clarify the purpose of these trivial legacy cache models, simplify the
> initialization of cache info in X86CPUState, and make it easier to
> handle compatibility later.
>
> Signed-off-by: Zhao Liu <zhao1....@intel.com>
> ---
>  target/i386/cpu.c | 101 +++++++++++++++++++++++++---------------------
>  1 file changed, 54 insertions(+), 47 deletions(-)
>
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 0b292aa2e07b..ec229830c532 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -643,21 +643,6 @@ static void encode_topo_cpuid8000001e(X86CPU *cpu, 
> X86CPUTopoInfo *topo_info,
>   * These are legacy cache values. If there is a need to change any
>   * of these values please use builtin_x86_defs
>   */
> -
> -/* L1 data cache: */
> -static CPUCacheInfo legacy_l1d_cache = {
> -    .type = DATA_CACHE,
> -    .level = 1,
> -    .size = 32 * KiB,
> -    .self_init = 1,
> -    .line_size = 64,
> -    .associativity = 8,
> -    .sets = 64,
> -    .partitions = 1,
> -    .no_invd_sharing = true,
> -    .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> -};
> -
>  static CPUCacheInfo legacy_l1d_cache_amd = {
>      .type = DATA_CACHE,
>      .level = 1,
> @@ -672,20 +657,6 @@ static CPUCacheInfo legacy_l1d_cache_amd = {
>      .share_level = CPU_TOPOLOGY_LEVEL_CORE,
>  };
>  
> -/* L1 instruction cache: */
> -static CPUCacheInfo legacy_l1i_cache = {
> -    .type = INSTRUCTION_CACHE,
> -    .level = 1,
> -    .size = 32 * KiB,
> -    .self_init = 1,
> -    .line_size = 64,
> -    .associativity = 8,
> -    .sets = 64,
> -    .partitions = 1,
> -    .no_invd_sharing = true,
> -    .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> -};
> -
>  static CPUCacheInfo legacy_l1i_cache_amd = {
>      .type = INSTRUCTION_CACHE,
>      .level = 1,
> @@ -700,20 +671,6 @@ static CPUCacheInfo legacy_l1i_cache_amd = {
>      .share_level = CPU_TOPOLOGY_LEVEL_CORE,
>  };
>  
> -/* Level 2 unified cache: */
> -static CPUCacheInfo legacy_l2_cache = {
> -    .type = UNIFIED_CACHE,
> -    .level = 2,
> -    .size = 4 * MiB,
> -    .self_init = 1,
> -    .line_size = 64,
> -    .associativity = 16,
> -    .sets = 4096,
> -    .partitions = 1,
> -    .no_invd_sharing = true,
> -    .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> -};
> -
>  static CPUCacheInfo legacy_l2_cache_amd = {
>      .type = UNIFIED_CACHE,
>      .level = 2,
> @@ -803,6 +760,59 @@ static const CPUCaches legacy_intel_cpuid2_cache_info = {
>      },
>  };
>  
> +static const CPUCaches legacy_intel_cache_info = {
> +    .l1d_cache = &(CPUCacheInfo) {
> +        .type = DATA_CACHE,
> +        .level = 1,
> +        .size = 32 * KiB,
> +        .self_init = 1,
> +        .line_size = 64,
> +        .associativity = 8,
> +        .sets = 64,
> +        .partitions = 1,
> +        .no_invd_sharing = true,
> +        .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> +    },
> +    .l1i_cache = &(CPUCacheInfo) {
> +        .type = INSTRUCTION_CACHE,
> +        .level = 1,
> +        .size = 32 * KiB,
> +        .self_init = 1,
> +        .line_size = 64,
> +        .associativity = 8,
> +        .sets = 64,
> +        .partitions = 1,
> +        .no_invd_sharing = true,
> +        .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> +    },
> +    .l2_cache = &(CPUCacheInfo) {
> +        .type = UNIFIED_CACHE,
> +        .level = 2,
> +        .size = 4 * MiB,
> +        .self_init = 1,
> +        .line_size = 64,
> +        .associativity = 16,
> +        .sets = 4096,
> +        .partitions = 1,
> +        .no_invd_sharing = true,
> +        .share_level = CPU_TOPOLOGY_LEVEL_CORE,
> +    },
> +    .l3_cache = &(CPUCacheInfo) {
> +        .type = UNIFIED_CACHE,
> +        .level = 3,
> +        .size = 16 * MiB,
> +        .line_size = 64,
> +        .associativity = 16,
> +        .sets = 16384,
> +        .partitions = 1,
> +        .lines_per_tag = 1,
> +        .self_init = true,
> +        .inclusive = true,
> +        .complex_indexing = true,
> +        .share_level = CPU_TOPOLOGY_LEVEL_DIE,
> +    },
> +};
> +
>  /* TLB definitions: */
>  
>  #define L1_DTLB_2M_ASSOC       1
> @@ -8971,10 +8981,7 @@ static void x86_cpu_realizefn(DeviceState *dev, Error 
> **errp)
>              env->enable_legacy_cpuid2_cache = true;
>          }
>  
> -        env->cache_info_cpuid4.l1d_cache = &legacy_l1d_cache;
> -        env->cache_info_cpuid4.l1i_cache = &legacy_l1i_cache;
> -        env->cache_info_cpuid4.l2_cache = &legacy_l2_cache;
> -        env->cache_info_cpuid4.l3_cache = &legacy_l3_cache;
> +        env->cache_info_cpuid4 = legacy_intel_cache_info;
>  
>          env->cache_info_amd.l1d_cache = &legacy_l1d_cache_amd;
>          env->cache_info_amd.l1i_cache = &legacy_l1i_cache_amd;

Reviewed-by: Dapeng Mi <dapeng1...@linux.intel.com>



Reply via email to