i386/cpu: add has_caches flag to check smp_cache configuration

Add has_caches flag to SMPCompatProps, which helps in avoiding
extra checks for every single layer of caches in x86 (and ARM in
future).

Signed-off-by: Alireza Sanaee <alireza.sanaee@huawei.com>
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
Link: https://lore.kernel.org/r/20250110145115.1574345-6-zhao1.liu@intel.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Alireza Sanaee 2025-01-10 22:51:15 +08:00 committed by Paolo Bonzini
parent 90df2cac37
commit 47fc56f36d
3 changed files with 10 additions and 6 deletions

View File

@ -332,6 +332,8 @@ bool machine_parse_smp_cache(MachineState *ms,
return false;
}
}
mc->smp_props.has_caches = true;
return true;
}

View File

@ -156,6 +156,8 @@ typedef struct {
* @modules_supported - whether modules are supported by the machine
* @cache_supported - whether cache (l1d, l1i, l2 and l3) configuration are
* supported by the machine
* @has_caches - whether cache properties are explicitly specified in the
* user provided smp-cache configuration
*/
typedef struct {
bool prefer_sockets;
@ -166,6 +168,7 @@ typedef struct {
bool drawers_supported;
bool modules_supported;
bool cache_supported[CACHE_LEVEL_AND_TYPE__MAX];
bool has_caches;
} SMPCompatProps;
/**

View File

@ -8203,13 +8203,12 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
#ifndef CONFIG_USER_ONLY
MachineState *ms = MACHINE(qdev_get_machine());
MachineClass *mc = MACHINE_GET_CLASS(ms);
/*
* TODO: Add a SMPCompatProps.has_caches flag to avoid useless updates
* if user didn't set smp_cache.
*/
if (!x86_cpu_update_smp_cache_topo(ms, cpu, errp)) {
return;
if (mc->smp_props.has_caches) {
if (!x86_cpu_update_smp_cache_topo(ms, cpu, errp)) {
return;
}
}
qemu_register_reset(x86_cpu_machine_reset_cb, cpu);