79 lines
3.1 KiB
Diff
79 lines
3.1 KiB
Diff
From c39a8362df8c09b9c66bb9c5295dc26373244fed Mon Sep 17 00:00:00 2001
|
|
From: David Hildenbrand <david@redhat.com>
|
|
Date: Mon, 26 Nov 2018 09:57:34 +0000
|
|
Subject: [PATCH 35/35] pc-dimm: turn alignment assert into check
|
|
|
|
RH-Author: David Hildenbrand <david@redhat.com>
|
|
Message-id: <20181126095734.30666-1-david@redhat.com>
|
|
Patchwork-id: 83163
|
|
O-Subject: [RHEL-8.0 qemu-kvm PATCH] pc-dimm: turn alignment assert into check
|
|
Bugzilla: 1630116
|
|
RH-Acked-by: Pankaj Gupta <pagupta@redhat.com>
|
|
RH-Acked-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
|
|
RH-Acked-by: Igor Mammedov <imammedo@redhat.com>
|
|
|
|
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1630116
|
|
Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=19276337
|
|
Upstream: 4d8938a05db15dea2c86c4ab9c5f872f160d2188
|
|
Branch: rhel8/master-2.12.0
|
|
|
|
The start of the address space indicates which maximum alignment is
|
|
supported by our machine (e.g. ppc, x86 1GB). This is helpful to
|
|
catch fragmenting guest physical memory in strange fashions.
|
|
|
|
Right now we can crash QEMU by e.g. (there might be easier examples)
|
|
|
|
qemu-system-x86_64 -m 256M,maxmem=20G,slots=2 \
|
|
-object memory-backend-file,id=mem0,size=8192M,mem-path=/dev/zero,align=8192M \
|
|
-device pc-dimm,id=dimm1,memdev=mem0
|
|
|
|
Backport conflicts:
|
|
hw/mem/memory-device.c: The memory device refactoring is part of 3.0,
|
|
so fix it in previous pc-dimm code.
|
|
Note: The upstream patch missed a "x" (0% .. vs. 0x% ..), which was
|
|
fixed in 7c63ba2055a0 ("memory-device: fix alignment error message"),
|
|
however as this is not a clean cherry pick, I'm fixing it right
|
|
away (like in the RHEL7.6 backport).
|
|
|
|
Signed-off-by: David Hildenbrand <david@redhat.com>
|
|
Message-Id: <20180607154705.6316-2-david@redhat.com>
|
|
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
|
|
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
(cherry picked from commit 4d8938a05db15dea2c86c4ab9c5f872f160d2188)
|
|
Signed-off-by: David Hildenbrand <david@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
hw/mem/pc-dimm.c | 9 +++++++--
|
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
|
|
index 51350d9..a9d7c51 100644
|
|
--- a/hw/mem/pc-dimm.c
|
|
+++ b/hw/mem/pc-dimm.c
|
|
@@ -298,14 +298,19 @@ uint64_t pc_dimm_get_free_addr(uint64_t address_space_start,
|
|
uint64_t new_addr, ret = 0;
|
|
uint64_t address_space_end = address_space_start + address_space_size;
|
|
|
|
- g_assert(QEMU_ALIGN_UP(address_space_start, align) == address_space_start);
|
|
-
|
|
if (!address_space_size) {
|
|
error_setg(errp, "memory hotplug is not enabled, "
|
|
"please add maxmem option");
|
|
goto out;
|
|
}
|
|
|
|
+ /* address_space_start indicates the maximum alignment we expect */
|
|
+ if (QEMU_ALIGN_UP(address_space_start, align) != address_space_start) {
|
|
+ error_setg(errp, "the alignment (0x%" PRIx64 ") is not supported",
|
|
+ align);
|
|
+ goto out;
|
|
+ }
|
|
+
|
|
if (hint && QEMU_ALIGN_UP(*hint, align) != *hint) {
|
|
error_setg(errp, "address must be aligned to 0x%" PRIx64 " bytes",
|
|
align);
|
|
--
|
|
1.8.3.1
|
|
|