From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32774) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WrSHO-0003Wz-7u for qemu-devel@nongnu.org; Mon, 02 Jun 2014 09:28:03 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WrSHI-0007vt-UX for qemu-devel@nongnu.org; Mon, 02 Jun 2014 09:27:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:23302) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WrSHI-0007vm-Ml for qemu-devel@nongnu.org; Mon, 02 Jun 2014 09:27:52 -0400 From: Igor Mammedov Date: Mon, 2 Jun 2014 15:25:00 +0200 Message-Id: <1401715529-636-5-git-send-email-imammedo@redhat.com> In-Reply-To: <1401715529-636-1-git-send-email-imammedo@redhat.com> References: <1401715529-636-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH v4 04/33] vl.c: daemonize before guest memory allocation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: lcapitulino@redhat.com, aliguori@amazon.com, mst@redhat.com memory allocated for guest before QEMU is daemonized and then mapped later in guest's address space after it is daemonized, leads to EPT violation and QEMU aborts. To avoid this and similar issues switch to daemonized mode early before applying/processing other options. Signed-off-by: Igor Mammedov Acked-by: Peter Crosthwaite --- I haven't digged in kvm itself yet why EPT violation happens, but fix on QEMU side looks trivial so it won't hurt to use it anyway. there is simpler reporoducer without migration, start guest with '-object memory-ram,id=foo,size=1G' when guest is up and running hotplug dimm device using 'foo' memdev as backend. --- vl.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vl.c b/vl.c index 037aa62..2449d78 100644 --- a/vl.c +++ b/vl.c @@ -3965,6 +3965,8 @@ int main(int argc, char **argv, char **envp) } loc_set_none(); + os_daemonize(); + if (qemu_init_main_loop()) { fprintf(stderr, "qemu_init_main_loop failed\n"); exit(1); @@ -4206,8 +4208,6 @@ int main(int argc, char **argv, char **envp) } #endif - os_daemonize(); - if (pid_file && qemu_create_pidfile(pid_file) != 0) { os_pidfile_error(); exit(1); -- 1.7.1