[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-arm] [PATCH v8 09/18] hw/arm/virt: Check the VCPU PA range in TCG
From: |
Eric Auger |
Subject: |
[Qemu-arm] [PATCH v8 09/18] hw/arm/virt: Check the VCPU PA range in TCG mode |
Date: |
Tue, 26 Feb 2019 14:50:05 +0100 |
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>
---
hw/arm/virt.c | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 3981916931..17a34574ae 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, \
@@ -1603,6 +1604,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-arm] [PATCH v8 00/18] ARM virt: Initial RAM expansion and PCDIMM/NVDIMM support, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 01/18] hw/arm/boot: introduce fdt_add_memory_node helper, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 02/18] hw/arm/virt: Rename highmem IO regions, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 03/18] hw/arm/virt: Split the memory map description, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 04/18] hw/boards: Add a MachineState parameter to kvm_type callback, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 05/18] kvm: add kvm_arm_get_max_vm_ipa_size, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 06/18] vl: Set machine ram_size, maxram_size and ram_slots earlier, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 08/18] hw/arm/virt: Implement kvm_type function for 4.0 machine, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 07/18] hw/arm/virt: Dynamic memory map depending on RAM requirements, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 09/18] hw/arm/virt: Check the VCPU PA range in TCG mode,
Eric Auger <=
- [Qemu-arm] [PATCH v8 10/18] hw/arm/virt: Bump the 255GB initial RAM limit, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 11/18] hw/arm/virt: Add memory hotplug framework, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 12/18] hw/arm/boot: Expose the PC-DIMM nodes in the DT, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 13/18] hw/arm/virt-acpi-build: Add PC-DIMM in SRAT, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 14/18] nvdimm: Use configurable ACPI IO base and size, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 15/18] machine: Move acpi_nvdimm_state into struct MachineState, Eric Auger, 2019/02/26
- [Qemu-arm] [PATCH v8 18/18] hw/arm/virt: Allow nvdimm instantiation, Eric Auger, 2019/02/26