Hi Drew,
On 8/5/20 11:16 AM, Andrew Jones wrote:
> We'll add more to this new function in coming patches so we also
> state the gic must be created and call it below create_gic().
>
> No functional change intended.
>
> Signed-off-by: Andrew Jones <[email protected]>
> Reviewed-by: Peter Maydell <[email protected]>
Reviewed-by: Eric Auger <[email protected]>
Eric
> ---
> hw/arm/virt.c | 43 +++++++++++++++++++++++++++----------------
> 1 file changed, 27 insertions(+), 16 deletions(-)
>
> diff --git a/hw/arm/virt.c b/hw/arm/virt.c
> index acf9bfbeceaf..2cba21fe3ad9 100644
> --- a/hw/arm/virt.c
> +++ b/hw/arm/virt.c
> @@ -1672,6 +1672,31 @@ static void finalize_gic_version(VirtMachineState *vms)
> }
> }
>
> +/*
> + * virt_cpu_post_init() must be called after the CPUs have
> + * been realized and the GIC has been created.
> + */
> +static void virt_cpu_post_init(VirtMachineState *vms)
> +{
> + bool aarch64;
> +
> + aarch64 = object_property_get_bool(OBJECT(first_cpu), "aarch64", NULL);
> +
> + if (!kvm_enabled()) {
> + if (aarch64 && vms->highmem) {
> + int requested_pa_size = 64 - clz64(vms->highest_gpa);
> + int pamax = arm_pamax(ARM_CPU(first_cpu));
> +
> + if (pamax < requested_pa_size) {
> + error_report("VCPU supports less PA bits (%d) than "
> + "requested by the memory map (%d)",
> + pamax, requested_pa_size);
> + exit(1);
> + }
> + }
> + }
> +}
> +
> static void machvirt_init(MachineState *machine)
> {
> VirtMachineState *vms = VIRT_MACHINE(machine);
> @@ -1886,22 +1911,6 @@ static void machvirt_init(MachineState *machine)
> fdt_add_timer_nodes(vms);
> fdt_add_cpu_nodes(vms);
>
> - if (!kvm_enabled()) {
> - ARMCPU *cpu = ARM_CPU(first_cpu);
> - bool aarch64 = object_property_get_bool(OBJECT(cpu), "aarch64",
> NULL);
> -
> - if (aarch64 && vms->highmem) {
> - int requested_pa_size, pamax = arm_pamax(cpu);
> -
> - requested_pa_size = 64 - clz64(vms->highest_gpa);
> - if (pamax < requested_pa_size) {
> - error_report("VCPU supports less PA bits (%d) than requested
> "
> - "by the memory map (%d)", pamax,
> requested_pa_size);
> - exit(1);
> - }
> - }
> - }
> -
> memory_region_add_subregion(sysmem, vms->memmap[VIRT_MEM].base,
> machine->ram);
> if (machine->device_memory) {
> @@ -1913,6 +1922,8 @@ static void machvirt_init(MachineState *machine)
>
> create_gic(vms);
>
> + virt_cpu_post_init(vms);
> +
> fdt_add_pmu_nodes(vms);
>
> create_uart(vms, VIRT_UART, sysmem, serial_hd(0));
>