]> git.ipfire.org Git - thirdparty/qemu.git/commitdiff
vl: Delay initialization of memory backends
authorEduardo Habkost <ehabkost@redhat.com>
Fri, 2 Sep 2016 18:59:44 +0000 (15:59 -0300)
committerMichael Roth <mdroth@linux.vnet.ibm.com>
Tue, 13 Dec 2016 00:13:21 +0000 (18:13 -0600)
Initialization of memory backends may take a while when
prealloc=yes is used, depending on their size. Initializing
memory backends before chardevs may delay the creation of monitor
sockets, and trigger timeouts on management software that waits
until the monitor socket is created by QEMU. See, for example,
the bug report at:
https://bugzilla.redhat.com/show_bug.cgi?id=1371211

In addition to that, allocating memory before calling
configure_accelerator() breaks the tcg_enabled() checks at
memory_region_init_*().

This patch fixes those problems by adding "memory-backend-*"
classes to the delayed-initialization list.

Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
(cherry picked from commit 6546d0dba6c211c1a3eac1252a4f50a0c151a08a)
Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
vl.c

diff --git a/vl.c b/vl.c
index 3414e1a694d261f3ef946e2b689b77fed662ae21..6a218cefcbe01483b0e06be3d9a91f04a2f76065 100644 (file)
--- a/vl.c
+++ b/vl.c
@@ -2811,6 +2811,19 @@ static bool object_create_initial(const char *type)
         return false;
     }
 
+    /* Memory allocation by backends needs to be done
+     * after configure_accelerator() (due to the tcg_enabled()
+     * checks at memory_region_init_*()).
+     *
+     * Also, allocation of large amounts of memory may delay
+     * chardev initialization for too long, and trigger timeouts
+     * on software that waits for a monitor socket to be created
+     * (e.g. libvirt).
+     */
+    if (g_str_has_prefix(type, "memory-backend-")) {
+        return false;
+    }
+
     return true;
 }