From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51612) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZsX6R-0006fu-0j for qemu-devel@nongnu.org; Sat, 31 Oct 2015 10:25:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZsX6M-0002a6-2L for qemu-devel@nongnu.org; Sat, 31 Oct 2015 10:25:54 -0400 Received: from mga11.intel.com ([192.55.52.93]:56087) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZsX6L-0002a2-Sn for qemu-devel@nongnu.org; Sat, 31 Oct 2015 10:25:49 -0400 References: <1446184587-142784-1-git-send-email-guangrong.xiao@linux.intel.com> <1446184587-142784-20-git-send-email-guangrong.xiao@linux.intel.com> <5634A065.1050902@virtuozzo.com> From: Xiao Guangrong Message-ID: <5634CDDC.30102@linux.intel.com> Date: Sat, 31 Oct 2015 22:19:08 +0800 MIME-Version: 1.0 In-Reply-To: <5634A065.1050902@virtuozzo.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v6 19/33] dimm: keep the state of the whole backend memory List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Vladimir Sementsov-Ogievskiy , pbonzini@redhat.com, imammedo@redhat.com Cc: 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 On 10/31/2015 07:05 PM, Vladimir Sementsov-Ogievskiy wrote: > On 30.10.2015 08:56, Xiao Guangrong wrote: >> 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 498d380..44447d1 100644 >> --- a/hw/mem/dimm.c >> +++ b/hw/mem/dimm.c >> @@ -134,9 +134,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); >> } >> @@ -145,10 +152,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) > > should get_memory_region be used here like in previous patch? > No, it's different. @get_memory_region() is used to get the memory region mapping to guest's address space. Hovever for NVDIMM we have two kind of regions, one is @get_memory_region, another is only used in QEMU as NVDIMM's label data. host_memory_backend_get_memory() exactly gets the whole memory.