qemu/hw/core
Zhao Liu 4e88e7e340 qapi/qom: Define cache enumeration and properties for machine
The x86 and ARM need to allow user to configure cache properties
(current only topology):
 * For x86, the default cache topology model (of max/host CPU) does not
   always match the Host's real physical cache topology. Performance can
   increase when the configured virtual topology is closer to the
   physical topology than a default topology would be.
 * For ARM, QEMU can't get the cache topology information from the CPU
   registers, then user configuration is necessary. Additionally, the
   cache information is also needed for MPAM emulation (for TCG) to
   build the right PPTT.

Define smp-cache related enumeration and properties in QAPI, so that
user could configure cache properties for SMP system through -machine in
the subsequent patch.

Cache enumeration (CacheLevelAndType) is implemented as the combination
of cache level (level 1/2/3) and cache type (data/instruction/unified).

Currently, separated L1 cache (L1 data cache and L1 instruction cache)
with unified higher-level cache (e.g., unified L2 and L3 caches), is the
most common cache architectures.

Therefore, enumerate the L1 D-cache, L1 I-cache, L2 cache and L3 cache
with smp-cache object to add the basic cache topology support. Other
kinds of caches (e.g., L1 unified or L2/L3 separated caches) can be
added directly into CacheLevelAndType if necessary.

Cache properties (SmpCacheProperties) currently only contains cache
topology information, and other cache properties can be added in it
if necessary.

Note, define cache topology based on CPU topology level with two
reasons:

 1. In practice, a cache will always be bound to the CPU container
    (either private in the CPU container or shared among multiple
    containers), and CPU container is often expressed in terms of CPU
    topology level.
 2. The x86's cache-related CPUIDs encode cache topology based on APIC
    ID's CPU topology layout. And the ACPI PPTT table that ARM/RISCV
    relies on also requires CPU containers to help indicate the private
    shared hierarchy of the cache. Therefore, for SMP systems, it is
    natural to use the CPU topology hierarchy directly in QEMU to define
    the cache topology.

With smp-cache QAPI support, add smp cache topology for machine by
parsing the smp-cache object list.

Also add the helper to access/update cache topology level of machine.

Suggested-by: Daniel P. Berrange <berrange@redhat.com>
Signed-off-by: Zhao Liu <zhao1.liu@intel.com>
Tested-by: Yongwei Ma <yongwei.ma@intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Message-ID: <20241101083331.340178-4-zhao1.liu@intel.com>
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
2024-11-05 23:32:25 +00:00
..
bus.c hw/core: Remove transitional infrastructure from BusClass 2024-02-02 13:51:57 +00:00
clock-vmstate.c hw/core: Constify VMState 2023-12-29 11:17:30 +11:00
clock.c hw/clock: Expose 'qtest-clock-period' QOM property for QTests 2024-10-15 11:29:45 +01:00
cpu-common.c include: Move QemuLockCnt APIs to their own header 2024-10-15 15:16:17 +01:00
cpu-sysemu.c exec: Declare target_words_bigendian() in 'exec/tswap.h' 2024-04-26 17:03:05 +02:00
eif.c hw/core: Add Enclave Image Format (EIF) related helpers 2024-10-31 18:28:32 +01:00
eif.h hw/core: Add Enclave Image Format (EIF) related helpers 2024-10-31 18:28:32 +01:00
fw-path-provider.c Include qemu/module.h where needed, drop it from qemu-common.h 2019-06-12 13:18:33 +02:00
generic-loader.c exec: Declare target_words_bigendian() in 'exec/tswap.h' 2024-04-26 17:03:05 +02:00
gpio.c hw/qdev: Rename qdev_connect_gpio_out*() 'input_pin' parameter 2021-12-31 13:21:36 +01:00
guest-loader.c Mark remaining global TypeInfo instances as const 2022-02-21 13:30:20 +00:00
guest-loader.h hw/core: implement a guest-loader to support static hypervisor guests 2021-03-10 15:34:11 +00:00
hotplug.c call HotplugHandler->plug() as the last step in device realization 2018-10-19 13:44:12 +02:00
irq.c hw: fix memory leak in IRQState allocation 2024-10-01 13:55:39 +01:00
Kconfig hw/core: Add Enclave Image Format (EIF) related helpers 2024-10-31 18:28:32 +01:00
loader-fit.c hw/core: ensure kernel_end never gets used undefined 2024-07-05 12:33:41 +01:00
loader.c loader: remove load_image_gzipped function as its not used anywhere 2024-07-16 20:04:08 +02:00
machine-hmp-cmds.c hw/core: Introduce module-id as the topology subindex 2024-04-25 12:48:12 +02:00
machine-qmp-cmds.c hw/intc: Introduce x-query-interrupt-controllers QMP command 2024-06-19 12:40:49 +02:00
machine-smp.c qapi/qom: Define cache enumeration and properties for machine 2024-11-05 23:32:25 +00:00
machine.c qapi/qom: Define cache enumeration and properties for machine 2024-11-05 23:32:25 +00:00
meson.build hw/core: Add Enclave Image Format (EIF) related helpers 2024-10-31 18:28:32 +01:00
nmi.c hw/core: Improve error message when machine doesn't provide NMIs 2023-02-23 14:10:17 +01:00
null-machine.c Do not include sysemu/sysemu.h if it's not really necessary 2021-05-02 17:24:50 +02:00
numa.c hw/core: replace assert(0) with g_assert_not_reached() 2024-09-13 20:12:16 +02:00
or-irq.c hw: Use device_class_set_legacy_reset() instead of opencoding 2024-09-13 15:31:44 +01:00
platform-bus.c platform-bus: fix refcount leak 2024-09-05 13:12:37 +01:00
ptimer.c hw/core/ptimer: fix timer zero period condition for freq > 1GHz 2024-08-12 11:40:16 +01:00
qdev-clock.c Drop more useless casts from void * to pointer 2022-12-14 16:19:35 +01:00
qdev-fw.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
qdev-hotplug.c hw/core: Extract hotplug-related functions to qdev-hotplug.c 2021-11-01 19:44:11 +01:00
qdev-prop-internal.h qdev: Make qdev_propinfo_get_uint16() static 2020-12-15 10:02:07 -05:00
qdev-properties-system.c block: Adjust check_block_size() signature 2024-10-18 15:03:35 +02:00
qdev-properties.c qapi: Inline and remove QERR_PROPERTY_VALUE_BAD definition 2024-04-24 09:50:58 +02:00
qdev.c qom: let object_new use a module if the type is not present 2024-10-31 18:28:32 +01:00
register.c hw/core/register: Add more 64-bit utilities 2021-09-01 11:59:12 +10:00
reset.c reset: Use ResetType for qemu_devices_reset() and MachineClass::reset() 2024-09-24 11:33:34 +02:00
resetcontainer.c hw/core: Add ResetContainer which holds objects implementing Resettable 2024-02-27 13:01:42 +00:00
resettable.c hw/core/resettable: Remove transitional_function machinery 2024-09-13 15:31:46 +01:00
split-irq.c qdev: set properties with device_class_set_props() 2020-01-24 20:59:15 +01:00
stream.c hw/core/stream: Rename StreamSlave as StreamSink 2020-12-10 12:15:04 -05:00
sysbus-fdt.c hw/core: Tidy up unnecessary casting away of const 2022-10-22 22:50:27 +02:00
sysbus.c hw/sysbus: Remove unused sysbus_mmio_unmap 2024-09-20 10:01:40 +03:00
trace-events trace-events: remove the remaining vcpu trace events 2023-06-01 11:05:05 -04:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
uboot_image.h license: Update deprecated SPDX tag GPL-2.0+ to GPL-2.0-or-later 2024-09-20 10:11:59 +03:00
vm-change-state-handler.c qdev: Add qdev_add_vm_change_state_handler_full() 2023-09-11 08:34:05 +02:00
vmstate-if.c vmstate: add qom interface to get id 2020-01-06 18:41:32 +04:00