From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ling, Xiaofeng" Subject: [PATCH]fix zombie domain when destroying 2.6 linux vmx guest Date: Tue, 22 Nov 2005 10:10:50 +0800 Message-ID: <43827E2A.5000202@intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------050102050305080207040707" Return-path: 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 List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------050102050305080207040707 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit Fix the zombie domain when destroying 2.6 linux vmx guest. The zombie domain is caused by unreleased shadow page because of lack of put_shadow_ref. When unshadow a L1 page, set l2e to zero and put ref. Signed-off-by: --------------050102050305080207040707 Content-Type: text/x-patch; name="zombiefix.patch" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="zombiefix.patch" # HG changeset patch # User Xiaofeng Ling # Node ID dd78c7cb5cf29510b8651ea9394c9385e291b888 # Parent 27a2cb379c8ffcca77d9ec262d3baf06e7f85175 Fix the zombie domain when destroy 2.6 linux vmx guest. The zombie domain is caused by unreleased shadow page because of lack of put_shadow_ref. When unshadow a L1 page, set l2e to zero and put ref. Signed-off-by: diff -r 27a2cb379c8f -r dd78c7cb5cf2 xen/arch/x86/shadow.c --- a/xen/arch/x86/shadow.c Mon Nov 21 17:06:42 2005 +0100 +++ b/xen/arch/x86/shadow.c Tue Nov 22 09:14:59 2005 +0800 @@ -1536,12 +1536,13 @@ perfc_incr_histo(l1_entries_checked, max_shadow - min_shadow + 1, PT_UPDATES); if ( d->arch.ops->guest_paging_levels >= PAGING_L3 && unshadow_l1 ) { - pgentry_64_t l2e = {0}; + pgentry_64_t l2e; __shadow_get_l2e(entry->v, entry->va, &l2e); if ( entry_get_flags(l2e) & _PAGE_PRESENT ) { - entry_remove_flags(l2e, _PAGE_PRESENT); + put_shadow_ref(entry_get_pfn(l2e)); + l2e = entry_empty(); __shadow_set_l2e(entry->v, entry->va, &l2e); if (entry->v == current) diff -r 27a2cb379c8f -r dd78c7cb5cf2 xen/arch/x86/shadow32.c --- a/xen/arch/x86/shadow32.c Mon Nov 21 17:06:42 2005 +0100 +++ b/xen/arch/x86/shadow32.c Tue Nov 22 09:14:59 2005 +0800 @@ -2426,7 +2426,8 @@ __shadow_get_l2e(entry->v, entry->va, &l2e); if (l2e_get_flags(l2e) & _PAGE_PRESENT) { - l2e_remove_flags(l2e, _PAGE_PRESENT); + put_shadow_ref(l2e_get_pfn(l2e)); + l2e = l2e_empty(); __shadow_set_l2e(entry->v, entry->va, l2e); if (entry->v == current) --------------050102050305080207040707 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------050102050305080207040707--