mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-03 07:43:54 -06:00
hw/arm/virt: Check the VCPU PA range in TCG mode
We are about to allow the memory map to grow beyond 1TB and potentially overshoot the VCPU AA64MMFR0.PARANGE. In aarch64 mode and when highmem is set, let's check the VCPU PA range is sufficient to address the highest GPA of the memory map. Signed-off-by: Eric Auger <eric.auger@redhat.com> Reviewed-by: Igor Mammedov <imammedo@redhat.com> Message-id: 20190304101339.25970-10-eric.auger@redhat.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
c9650222b8
commit
2ba956ccfa
1 changed files with 17 additions and 0 deletions
|
@ -60,6 +60,7 @@
|
|||
#include "standard-headers/linux/input.h"
|
||||
#include "hw/arm/smmuv3.h"
|
||||
#include "hw/acpi/acpi.h"
|
||||
#include "target/arm/internals.h"
|
||||
|
||||
#define DEFINE_VIRT_MACHINE_LATEST(major, minor, latest) \
|
||||
static void virt_##major##_##minor##_class_init(ObjectClass *oc, \
|
||||
|
@ -1608,6 +1609,22 @@ 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_allocate_system_memory(ram, NULL, "mach-virt.ram",
|
||||
machine->ram_size);
|
||||
memory_region_add_subregion(sysmem, vms->memmap[VIRT_MEM].base, ram);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue