[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 20/22] hw/arm/virt: Check the VCPU PA range in TCG mo
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 20/22] hw/arm/virt: Check the VCPU PA range in TCG mode |
Date: |
Tue, 5 Mar 2019 16:50:49 +0000 |
From: Eric Auger <address@hidden>
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 <address@hidden>
Reviewed-by: Igor Mammedov <address@hidden>
Message-id: address@hidden
Signed-off-by: Peter Maydell <address@hidden>
---
hw/arm/virt.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 3ac6b152f55..d725daefdf8 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -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);
--
2.20.1
- [Qemu-devel] [PULL 11/22] target/arm: Implement ARMv8.5-FRINT, (continued)
- [Qemu-devel] [PULL 11/22] target/arm: Implement ARMv8.5-FRINT, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 07/22] target/arm: Rearrange disas_data_proc_reg, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 10/22] target/arm: Restructure handle_fp_1src_{single, double}, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 12/22] hw/arm/boot: introduce fdt_add_memory_node helper, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 13/22] hw/arm/virt: Rename highmem IO regions, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 14/22] hw/arm/virt: Split the memory map description, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 15/22] hw/boards: Add a MachineState parameter to kvm_type callback, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 17/22] vl: Set machine ram_size, maxram_size and ram_slots earlier, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 18/22] hw/arm/virt: Dynamic memory map depending on RAM requirements, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 19/22] hw/arm/virt: Implement kvm_type function for 4.0 machine, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 20/22] hw/arm/virt: Check the VCPU PA range in TCG mode,
Peter Maydell <=
- [Qemu-devel] [PULL 16/22] kvm: add kvm_arm_get_max_vm_ipa_size, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 22/22] hw/arm/stellaris: Implement watchdog timer, Peter Maydell, 2019/03/05
- [Qemu-devel] [PULL 21/22] hw/arm/virt: Bump the 255GB initial RAM limit, Peter Maydell, 2019/03/05
- Re: [Qemu-devel] [PULL 00/22] target-arm queue, Peter Maydell, 2019/03/05