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:
parent
90df2cac37
commit
47fc56f36d
@ -332,6 +332,8 @@ bool machine_parse_smp_cache(MachineState *ms,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mc->smp_props.has_caches = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -156,6 +156,8 @@ typedef struct {
|
|||||||
* @modules_supported - whether modules are supported by the machine
|
* @modules_supported - whether modules are supported by the machine
|
||||||
* @cache_supported - whether cache (l1d, l1i, l2 and l3) configuration are
|
* @cache_supported - whether cache (l1d, l1i, l2 and l3) configuration are
|
||||||
* supported by the machine
|
* supported by the machine
|
||||||
|
* @has_caches - whether cache properties are explicitly specified in the
|
||||||
|
* user provided smp-cache configuration
|
||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
bool prefer_sockets;
|
bool prefer_sockets;
|
||||||
@ -166,6 +168,7 @@ typedef struct {
|
|||||||
bool drawers_supported;
|
bool drawers_supported;
|
||||||
bool modules_supported;
|
bool modules_supported;
|
||||||
bool cache_supported[CACHE_LEVEL_AND_TYPE__MAX];
|
bool cache_supported[CACHE_LEVEL_AND_TYPE__MAX];
|
||||||
|
bool has_caches;
|
||||||
} SMPCompatProps;
|
} SMPCompatProps;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -8203,13 +8203,12 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp)
|
|||||||
|
|
||||||
#ifndef CONFIG_USER_ONLY
|
#ifndef CONFIG_USER_ONLY
|
||||||
MachineState *ms = MACHINE(qdev_get_machine());
|
MachineState *ms = MACHINE(qdev_get_machine());
|
||||||
|
MachineClass *mc = MACHINE_GET_CLASS(ms);
|
||||||
|
|
||||||
/*
|
if (mc->smp_props.has_caches) {
|
||||||
* TODO: Add a SMPCompatProps.has_caches flag to avoid useless updates
|
if (!x86_cpu_update_smp_cache_topo(ms, cpu, errp)) {
|
||||||
* if user didn't set smp_cache.
|
return;
|
||||||
*/
|
}
|
||||||
if (!x86_cpu_update_smp_cache_topo(ms, cpu, errp)) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qemu_register_reset(x86_cpu_machine_reset_cb, cpu);
|
qemu_register_reset(x86_cpu_machine_reset_cb, cpu);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user