From mboxrd@z Thu Jan 1 00:00:00 1970 From: Markus =?utf-8?b?R3Jvw58=?= Subject: Re: [PATCH] libxc: correctly unmap pages after core-dumping a pv guest Date: Mon, 23 May 2011 15:12:50 +0200 Message-ID: <20110523151250.12711b7xjmonuhy8@mail.univention.de> References: <201105231342.28471.gross@univention.de> <201105231424.01099.gross@univention.de> <1306154783.20576.98.camel@zakaz.uk.xensource.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; DelSp="Yes"; format="flowed" Content-Transfer-Encoding: quoted-printable Return-path: In-Reply-To: <1306154783.20576.98.camel@zakaz.uk.xensource.com> Content-Disposition: inline List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Ian Campbell Cc: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org Hi, while implementing core dumping functionality for the libxl driver of libvirt, I discovered an issue with mapping pages of a pv guest. After dumping the core of a pv guest the domain was not cleared up properly and some pages were not unmapped. This issue is similar to the one reported here: http://lists.xensource.com/archives/html/xen-devel/2011-05/msg01314.html In xc_domain_dumpcore_via_callback in the file xc_core.c the function xc_core_arch_map_p2m is called to map P2M_FL_ENTRIES pages to the =20 variable p2m. But to unmap the pages later, the dinfo->p2m_size has to be set accordingly= . This was not done, instead a variable named p2m_size was set. This way P2M_FL_ENTRIES was always zero and the pages were left mapped. The following patch fixes this. Best regards, Markus Signed-off-by: Markus Gro=C3=9F univention.de> diff -r 7c7ef1b6f4e5 tools/libxc/xc_core.c --- a/tools/libxc/xc_core.c Tue Apr 26 14:11:18 2011 +0100 +++ b/tools/libxc/xc_core.c Mon May 23 13:36:23 2011 +0200 @@ -468,7 +468,6 @@ int auto_translated_physmap; xen_pfn_t *p2m =3D NULL; - unsigned long p2m_size =3D 0; struct xen_dumpcore_p2m *p2m_array =3D NULL; uint64_t *pfn_array =3D NULL; @@ -569,7 +568,7 @@ } sts =3D xc_core_arch_map_p2m(xch, dinfo->guest_width, &info, =20 live_shinfo, - &p2m, &p2m_size); + &p2m, &dinfo->p2m_size); if ( sts !=3D 0 ) goto out; }