|
|
7711c0 |
From 84d49bc7469905877fc22f6faea1e53c8c0cbe1c Mon Sep 17 00:00:00 2001
|
|
|
7711c0 |
From: David Hildenbrand <david@redhat.com>
|
|
|
7711c0 |
Date: Fri, 21 Sep 2018 09:19:39 +0200
|
|
|
7711c0 |
Subject: [PATCH 03/22] pc-dimm: turn alignment assert into check
|
|
|
7711c0 |
|
|
|
7711c0 |
RH-Author: David Hildenbrand <david@redhat.com>
|
|
|
7711c0 |
Message-id: <20180921091939.4107-1-david@redhat.com>
|
|
|
7711c0 |
Patchwork-id: 82227
|
|
|
7711c0 |
O-Subject: [RHEL-7.6 qemu-kvm-rhev PATCH] pc-dimm: turn alignment assert into check
|
|
|
7711c0 |
Bugzilla: 1629720
|
|
|
7711c0 |
RH-Acked-by: Pankaj Gupta <pagupta@redhat.com>
|
|
|
7711c0 |
RH-Acked-by: Igor Mammedov <imammedo@redhat.com>
|
|
|
7711c0 |
RH-Acked-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
7711c0 |
|
|
|
7711c0 |
BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1629720
|
|
|
7711c0 |
Brew: https://brewweb.engineering.redhat.com/brew/taskinfo?taskID=18439425
|
|
|
7711c0 |
Upstream: 4d8938a05db15dea2c86c4ab9c5f872f160d2188
|
|
|
7711c0 |
|
|
|
7711c0 |
The start of the address space indicates which maximum alignment is
|
|
|
7711c0 |
supported by our machine (e.g. ppc, x86 1GB). This is helpful to
|
|
|
7711c0 |
catch fragmenting guest physical memory in strange fashions.
|
|
|
7711c0 |
|
|
|
7711c0 |
Right now we can crash QEMU by e.g. (there might be easier examples)
|
|
|
7711c0 |
|
|
|
7711c0 |
qemu-system-x86_64 -m 256M,maxmem=20G,slots=2 \
|
|
|
7711c0 |
-object memory-backend-file,id=mem0,size=8192M,mem-path=/dev/zero,align=8192M \
|
|
|
7711c0 |
-device pc-dimm,id=dimm1,memdev=mem0
|
|
|
7711c0 |
|
|
|
7711c0 |
Backport conflicts:
|
|
|
7711c0 |
hw/mem/memory-device.c: The memory device refactoring is part of 3.0
|
|
|
7711c0 |
and probably not worth backporting to 7.X.
|
|
|
7711c0 |
So fix it in previous pc-dimm code.
|
|
|
7711c0 |
Note: The upstream patch missed a "x" (0% .. vs. 0x% ..), will fix that
|
|
|
7711c0 |
upstream, too.
|
|
|
7711c0 |
|
|
|
7711c0 |
Signed-off-by: David Hildenbrand <david@redhat.com>
|
|
|
7711c0 |
Message-Id: <20180607154705.6316-2-david@redhat.com>
|
|
|
7711c0 |
Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
|
|
|
7711c0 |
Reviewed-by: Igor Mammedov <imammedo@redhat.com>
|
|
|
7711c0 |
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
|
|
|
7711c0 |
(cherry picked from commit 4d8938a05db15dea2c86c4ab9c5f872f160d2188)
|
|
|
7711c0 |
Signed-off-by: David Hildenbrand <david@redhat.com>
|
|
|
7711c0 |
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
|
7711c0 |
---
|
|
|
7711c0 |
hw/mem/pc-dimm.c | 9 +++++++--
|
|
|
7711c0 |
1 file changed, 7 insertions(+), 2 deletions(-)
|
|
|
7711c0 |
|
|
|
7711c0 |
diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c
|
|
|
7711c0 |
index 51350d9..a9d7c51 100644
|
|
|
7711c0 |
--- a/hw/mem/pc-dimm.c
|
|
|
7711c0 |
+++ b/hw/mem/pc-dimm.c
|
|
|
7711c0 |
@@ -298,14 +298,19 @@ uint64_t pc_dimm_get_free_addr(uint64_t address_space_start,
|
|
|
7711c0 |
uint64_t new_addr, ret = 0;
|
|
|
7711c0 |
uint64_t address_space_end = address_space_start + address_space_size;
|
|
|
7711c0 |
|
|
|
7711c0 |
- g_assert(QEMU_ALIGN_UP(address_space_start, align) == address_space_start);
|
|
|
7711c0 |
-
|
|
|
7711c0 |
if (!address_space_size) {
|
|
|
7711c0 |
error_setg(errp, "memory hotplug is not enabled, "
|
|
|
7711c0 |
"please add maxmem option");
|
|
|
7711c0 |
goto out;
|
|
|
7711c0 |
}
|
|
|
7711c0 |
|
|
|
7711c0 |
+ /* address_space_start indicates the maximum alignment we expect */
|
|
|
7711c0 |
+ if (QEMU_ALIGN_UP(address_space_start, align) != address_space_start) {
|
|
|
7711c0 |
+ error_setg(errp, "the alignment (0x%" PRIx64 ") is not supported",
|
|
|
7711c0 |
+ align);
|
|
|
7711c0 |
+ goto out;
|
|
|
7711c0 |
+ }
|
|
|
7711c0 |
+
|
|
|
7711c0 |
if (hint && QEMU_ALIGN_UP(*hint, align) != *hint) {
|
|
|
7711c0 |
error_setg(errp, "address must be aligned to 0x%" PRIx64 " bytes",
|
|
|
7711c0 |
align);
|
|
|
7711c0 |
--
|
|
|
7711c0 |
1.8.3.1
|
|
|
7711c0 |
|