Blame SOURCES/kvm-pc-dimm-turn-alignment-assert-into-check.patch

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