summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorPeter Krempa <pkrempa@redhat.com>2015-01-29 14:48:41 +0100
committerMichael S. Tsirkin <mst@redhat.com>2015-02-26 12:42:19 +0100
commitf2c385220598523c8b9fefbfff1a6754cfd8232a (patch)
tree8f169ad4e8ee06d2e5e1437231fea6d88b10f3f3
parent214224adb4ebc9f3d211b867f588413e13f05bb3 (diff)
downloadfocaccia-qemu-f2c385220598523c8b9fefbfff1a6754cfd8232a.tar.gz
focaccia-qemu-f2c385220598523c8b9fefbfff1a6754cfd8232a.zip
pc: memory: Validate alignment of maxram_size to page size
If the maxram_size is not aligned and dimm devices were added on the
command line qemu would terminate with a rather unhelpful message:

ERROR:hw/mem/pc-dimm.c:150:pc_dimm_get_free_addr: assertion failed:
(QEMU_ALIGN_UP(address_space_size, align) == address_space_size)

In case no dimm device was originally added on the commandline qemu
exits on the assertion failure.

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Acked-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>


-rw-r--r--hw/i386/pc.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 60d4e02847..ae3ef0af4f 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -1245,6 +1245,13 @@ FWCfgState *pc_memory_init(MachineState *machine,
             exit(EXIT_FAILURE);
         }
 
+        if (QEMU_ALIGN_UP(machine->maxram_size,
+                          TARGET_PAGE_SIZE) != machine->maxram_size) {
+            error_report("maximum memory size must by aligned to multiple of "
+                         "%d bytes", TARGET_PAGE_SIZE);
+            exit(EXIT_FAILURE);
+        }
+
         pcms->hotplug_memory_base =
             ROUND_UP(0x100000000ULL + above_4g_mem_size, 1ULL << 30);