From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andres Lagar-Cavilla Subject: [PATCH 6 of 9] x86/mm: Fix balooning+sharing Date: Wed, 01 Feb 2012 14:51:58 -0500 Message-ID: <75dec1a0ba2d731ee977.1328125918@xdev.gridcentric.ca> References: Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: 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 Cc: andres@gridcentric.ca, tim@xen.org, olaf@aepfle.de, adin@gridcentric.ca List-Id: xen-devel@lists.xenproject.org xen/common/memory.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-) Never mind that ballooning a shared page makes no sense. We still fix it because it may be exercised. Signed-off-by: Andres Lagar-Cavilla diff -r 1c61573d1765 -r 75dec1a0ba2d xen/common/memory.c --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -185,12 +185,14 @@ int guest_remove_page(struct domain *d, #ifdef CONFIG_X86 /* If gmfn is shared, just drop the guest reference (which may or may not * free the page) */ - if(p2m_is_shared(p2mt)) + if ( p2m_is_shared(p2mt) ) { - put_page_and_type(page); - guest_physmap_remove_page(d, gmfn, mfn, 0); - put_gfn(d, gmfn); - return 1; + /* Unshare the page, bail out on error. We unshare because + * we might be the only one using this shared page, and we + * need to trigger proper cleanup. Once done, this is + * like any other page. */ + if ( mem_sharing_unshare_page(d, gmfn, 0) ) + return 0; } #endif /* CONFIG_X86 */