From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36900) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZKPry-0000Rb-7y for qemu-devel@nongnu.org; Wed, 29 Jul 2015 07:49:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZKPrw-0001b2-8Q for qemu-devel@nongnu.org; Wed, 29 Jul 2015 07:49:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:57828) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZKPrw-0001aX-2y for qemu-devel@nongnu.org; Wed, 29 Jul 2015 07:49:56 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id ADB8991C21 for ; Wed, 29 Jul 2015 11:49:55 +0000 (UTC) From: Igor Mammedov Date: Wed, 29 Jul 2015 13:49:49 +0200 Message-Id: <1438170589-139333-3-git-send-email-imammedo@redhat.com> In-Reply-To: <1438170589-139333-1-git-send-email-imammedo@redhat.com> References: <1438170589-139333-1-git-send-email-imammedo@redhat.com> Subject: [Qemu-devel] [PATCH for-2.4 v2 2/2] pc-dimm: add vhost slots limit check before commiting to hotplug List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: pbonzini@redhat.com, mst@redhat.com it allows safely cancel memory hotplug if vhost backend doesn't support necessary amount of memory slots and prevents QEMU crashing in vhost due to hitting vhost limit on amount of supported memory ranges. Signed-off-by: Igor Mammedov --- hw/mem/pc-dimm.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/hw/mem/pc-dimm.c b/hw/mem/pc-dimm.c index bb04862..901bdbf 100644 --- a/hw/mem/pc-dimm.c +++ b/hw/mem/pc-dimm.c @@ -25,6 +25,7 @@ #include "sysemu/numa.h" #include "sysemu/kvm.h" #include "trace.h" +#include "hw/virtio/vhost.h" typedef struct pc_dimms_capacity { uint64_t size; @@ -95,6 +96,12 @@ void pc_dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms, goto out; } + if (!vhost_has_free_slot()) { + error_setg(&local_err, "a used vhost backend has no free" + " memory slots left"); + goto out; + } + memory_region_add_subregion(&hpms->mr, addr - hpms->base, mr); vmstate_register_ram(mr, dev); numa_set_mem_node_id(addr, memory_region_size(mr), dimm->node); -- 1.8.3.1