From: Jinjie Ruan <[email protected]> Add the two MPAM machine properties: mpam=on enables MSC emulation for the virt board, and mpam-min-msc=on collapses the per-node memory MSCs into a single MSC with one RIS per node. The state fields and the property accessors only; MSC creation arrives with the later patches.
Signed-off-by: Jinjie Ruan <[email protected]> --- hw/arm/virt.c | 47 +++++++++++++++++++++++++++++++++++++++++++ include/hw/arm/virt.h | 2 ++ 2 files changed, 49 insertions(+) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 9d19251..aaadff6 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -2133,6 +2133,14 @@ static void create_virtio_iommu_dt_bindings(VirtMachineState *vms) } } +/* + * Partitioning geometry for board-created MSCs: 256 request PARTIDs + * narrowed to 32 internal PARTIDs (enables HAS_PARTID_NRW, so resctrl + * reports num_closids=32). + */ +#define MPAM_VIRT_NUM_PARTID 256 +#define MPAM_VIRT_NUM_INTPARTID 32 + static void create_pcie(VirtMachineState *vms) { hwaddr base_mmio = vms->memmap[VIRT_PCIE_MMIO].base; @@ -3498,6 +3506,34 @@ static void virt_set_virtio_transports(Object *obj, Visitor *v, vms->virtio_transports = transports; } +static bool virt_get_mpam(Object *obj, Error **errp) +{ + VirtMachineState *vms = VIRT_MACHINE(obj); + + return vms->mpam; +} + +static void virt_set_mpam(Object *obj, bool value, Error **errp) +{ + VirtMachineState *vms = VIRT_MACHINE(obj); + + vms->mpam = value; +} + +static bool virt_get_mpam_min_msc(Object *obj, Error **errp) +{ + VirtMachineState *vms = VIRT_MACHINE(obj); + + return vms->mpam_min_msc; +} + +static void virt_set_mpam_min_msc(Object *obj, bool value, Error **errp) +{ + VirtMachineState *vms = VIRT_MACHINE(obj); + + vms->mpam_min_msc = value; +} + static bool virt_get_dtb_randomness(Object *obj, Error **errp) { VirtMachineState *vms = VIRT_MACHINE(obj); @@ -4303,6 +4339,17 @@ static void virt_machine_class_init(ObjectClass *oc, const void *data) "guest CPU which implements the ARM " "Memory Tagging Extension"); + object_class_property_add_bool(oc, "mpam", virt_get_mpam, virt_set_mpam); + object_class_property_set_description(oc, "mpam", + "Set on/off to enable/disable " + "emulation of MPAM MSCs"); + + object_class_property_add_bool(oc, "mpam-min-msc", virt_get_mpam_min_msc, + virt_set_mpam_min_msc); + object_class_property_set_description(oc, "mpam-min-msc", + "Use RIS to reduce the number of " + "MSCs exposed"); + object_class_property_add_bool(oc, "its", virt_get_its, virt_set_its); object_class_property_set_description(oc, "its", diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h index 22e66d1..c847136 100644 --- a/include/hw/arm/virt.h +++ b/include/hw/arm/virt.h @@ -177,6 +177,8 @@ struct VirtMachineState { bool ras; bool mte; bool dtb_randomness; + bool mpam; + bool mpam_min_msc; bool second_ns_uart_present; OnOffAuto acpi; VirtGICType gic_version; -- 2.43.0
