From mboxrd@z Thu Jan 1 00:00:00 1970 From: Olaf Hering Subject: [PATCH 1/6] xenpaging: correct dropping pages to avoid full ring buffer Date: Sun, 16 Jan 2011 17:32:30 +0100 Message-ID: <20110116163229.462846702@aepfle.de> References: <20110116163229.044047464@aepfle.de> Return-path: Content-Disposition: inline; filename=xen-unstable.xenpaging.guest_remove_page.slow_path.patch List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org xenpaging uses the mem_event ring buffer, which expects request/response pairs to make progress. The previous patch, which tried to establish a one-way communication from Xen to xenpaging, stalled the guest once the buffer was filled up with requests. A simple fix is to take the slow path and let p2m_mem_paging_resume() consume the response from xenpaging. This makes room for yet another request/response pair and avoids hanging guests. Signed-off-by: Olaf Hering --- tools/xenpaging/xenpaging.c | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) --- xen-unstable.hg-4.1.22764.orig/tools/xenpaging/xenpaging.c +++ xen-unstable.hg-4.1.22764/tools/xenpaging/xenpaging.c @@ -653,19 +653,19 @@ int main(int argc, char *argv[]) ERROR("Error populating page"); goto out; } + } - /* Prepare the response */ - rsp.gfn = req.gfn; - rsp.p2mt = req.p2mt; - rsp.vcpu_id = req.vcpu_id; - rsp.flags = req.flags; + /* Prepare the response */ + rsp.gfn = req.gfn; + rsp.p2mt = req.p2mt; + rsp.vcpu_id = req.vcpu_id; + rsp.flags = req.flags; - rc = xenpaging_resume_page(paging, &rsp, 1); - if ( rc != 0 ) - { - ERROR("Error resuming page"); - goto out; - } + rc = xenpaging_resume_page(paging, &rsp, 1); + if ( rc != 0 ) + { + ERROR("Error resuming page"); + goto out; } /* Evict a new page to replace the one we just paged in */