From patchwork Sun Oct 11 03:52:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Xiao Guangrong X-Patchwork-Id: 528671 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 7A7F71402B9 for ; Sun, 11 Oct 2015 07:09:30 +1100 (AEDT) Received: from localhost ([::1]:46143 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zl0SO-0001cs-Gh for incoming@patchwork.ozlabs.org; Sat, 10 Oct 2015 16:09:28 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50543) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zl0IK-0000q4-R8 for qemu-devel@nongnu.org; Sat, 10 Oct 2015 15:59:05 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Zl0IH-0003o8-N8 for qemu-devel@nongnu.org; Sat, 10 Oct 2015 15:59:04 -0400 Received: from mga03.intel.com ([134.134.136.65]:60642) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Zl0IH-0003bu-HC for qemu-devel@nongnu.org; Sat, 10 Oct 2015 15:59:01 -0400 Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga103.jf.intel.com with ESMTP; 10 Oct 2015 12:59:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,664,1437462000"; d="scan'208";a="661783069" Received: from xiaoreal1.sh.intel.com (HELO xiaoreal1.sh.intel.com.sh.intel.com) ([10.239.48.79]) by orsmga003.jf.intel.com with ESMTP; 10 Oct 2015 12:58:58 -0700 From: Xiao Guangrong To: pbonzini@redhat.com, imammedo@redhat.com Date: Sun, 11 Oct 2015 11:52:51 +0800 Message-Id: <1444535584-18220-20-git-send-email-guangrong.xiao@linux.intel.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1444535584-18220-1-git-send-email-guangrong.xiao@linux.intel.com> References: <1444535584-18220-1-git-send-email-guangrong.xiao@linux.intel.com> X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 134.134.136.65 Cc: Xiao Guangrong , ehabkost@redhat.com, kvm@vger.kernel.org, mst@redhat.com, gleb@kernel.org, mtosatti@redhat.com, qemu-devel@nongnu.org, stefanha@redhat.com, dan.j.williams@intel.com, rth@twiddle.net Subject: [Qemu-devel] [PATCH v3 19/32] dimm: keep the state of the whole backend memory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org QEMU keeps the state of memory of dimm device during live migration, however, it is not enough for nvdimm device as its memory does not contain its label data, so that we should protect the whole backend memory instead Signed-off-by: Xiao Guangrong --- hw/mem/dimm.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/hw/mem/dimm.c b/hw/mem/dimm.c index b307511..efe964a 100644 --- a/hw/mem/dimm.c +++ b/hw/mem/dimm.c @@ -128,9 +128,16 @@ void dimm_memory_plug(DeviceState *dev, MemoryHotplugState *hpms, } 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); + /* + * save the state only for @mr is not enough as it does not contain + * the label data of NVDIMM device, so that we keep the state of + * whole hostmem instead. + */ + vmstate_register_ram(host_memory_backend_get_memory(dimm->hostmem, errp), + dev); + out: error_propagate(errp, local_err); } @@ -139,10 +146,13 @@ void dimm_memory_unplug(DeviceState *dev, MemoryHotplugState *hpms, MemoryRegion *mr) { DIMMDevice *dimm = DIMM(dev); + MemoryRegion *backend_mr; + + backend_mr = host_memory_backend_get_memory(dimm->hostmem, &error_abort); numa_unset_mem_node_id(dimm->addr, memory_region_size(mr), dimm->node); memory_region_del_subregion(&hpms->mr, mr); - vmstate_unregister_ram(mr, dev); + vmstate_unregister_ram(backend_mr, dev); } int qmp_dimm_device_list(Object *obj, void *opaque)