Hi Marc, On 1/7/22 5:33 PM, Marc Zyngier wrote: > Just like we can control the enablement of the highmem PCIe region > using highmem_ecam, let's add a control for the highmem GICv3 > redistributor region. > > Similarily to highmem_ecam, these redistributors are disabled when > highmem is off. > > Reviewed-by: Andrew Jones <drjo...@redhat.com> > Signed-off-by: Marc Zyngier <m...@kernel.org> > --- > hw/arm/virt-acpi-build.c | 2 ++ > hw/arm/virt.c | 2 ++ > include/hw/arm/virt.h | 4 +++- > 3 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/hw/arm/virt-acpi-build.c b/hw/arm/virt-acpi-build.c > index cdac009419..505c61e88e 100644 > --- a/hw/arm/virt-acpi-build.c > +++ b/hw/arm/virt-acpi-build.c > @@ -946,6 +946,8 @@ void virt_acpi_build(VirtMachineState *vms, > AcpiBuildTables *tables) > acpi_add_table(table_offsets, tables_blob); > build_fadt_rev5(tables_blob, tables->linker, vms, dsdt); > > + vms->highmem_redists &= vms->highmem; > + > acpi_add_table(table_offsets, tables_blob); > build_madt(tables_blob, tables->linker, vms); > > diff --git a/hw/arm/virt.c b/hw/arm/virt.c > index b9ce81f4a1..4d1d629432 100644 > --- a/hw/arm/virt.c > +++ b/hw/arm/virt.c > @@ -2106,6 +2106,7 @@ static void machvirt_init(MachineState *machine) > virt_flash_fdt(vms, sysmem, secure_sysmem ?: sysmem); > > vms->highmem_mmio &= vms->highmem; > + vms->highmem_redists &= vms->highmem; > > create_gic(vms, sysmem); > > @@ -2805,6 +2806,7 @@ static void virt_instance_init(Object *obj) > > vms->highmem_ecam = !vmc->no_highmem_ecam; > vms->highmem_mmio = true; > + vms->highmem_redists = true; > > if (vmc->no_its) { > vms->its = false; > diff --git a/include/hw/arm/virt.h b/include/hw/arm/virt.h > index 9c54acd10d..dc9fa26faa 100644 > --- a/include/hw/arm/virt.h > +++ b/include/hw/arm/virt.h > @@ -144,6 +144,7 @@ struct VirtMachineState { > bool highmem; > bool highmem_ecam; > bool highmem_mmio; > + bool highmem_redists; > bool its; > bool tcg_its; > bool virt; > @@ -190,7 +191,8 @@ static inline int > virt_gicv3_redist_region_count(VirtMachineState *vms) > > assert(vms->gic_version == VIRT_GIC_VERSION_3); > > - return MACHINE(vms)->smp.cpus > redist0_capacity ? 2 : 1; > + return (MACHINE(vms)->smp.cpus > redist0_capacity && > + vms->highmem_redists) ? 2 : 1; If we fail to use the high redist region, is there any check that the number of vcpus does not exceed the first redist region capacity. Did you check that config, does it nicely fail?
Eric > } > > #endif /* QEMU_ARM_VIRT_H */