diff options
author | Tim Deegan <tim@xen.org> | 2013-03-28 10:32:17 +0000 |
---|---|---|
committer | Tim Deegan <tim@xen.org> | 2013-04-04 10:14:30 +0100 |
commit | cfc515dabe91e3d6c690c68c6a669d6d77fb7ac4 (patch) | |
tree | cfa7d4af19d8c04dea9ab7ba00f8645da2386065 /xen/arch/x86/mm | |
parent | 0d2e673a763bc7c2ddf97fed074eb691d325ecc5 (diff) | |
download | xen-cfc515dabe91e3d6c690c68c6a669d6d77fb7ac4.tar.gz xen-cfc515dabe91e3d6c690c68c6a669d6d77fb7ac4.tar.bz2 xen-cfc515dabe91e3d6c690c68c6a669d6d77fb7ac4.zip |
x86/mm/shadow: spurious warning when unmapping xenheap pages.
Xenheap pages will always have an extra typecount, taken in
share_xen_page_with_guest(), which doesn't come from a shadow PTE.
Adjust the warning in sh_remove_all_mappings() to account for it.
Reported-by: Andrew Cooper <andrew.cooper3@citrix.com>
Signed-off-by: Tim Deegan <tim@xen.org>
Tested-by: Andrew Cooper <andrew.cooper3@citrix.com>
Diffstat (limited to 'xen/arch/x86/mm')
-rw-r--r-- | xen/arch/x86/mm/shadow/common.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/xen/arch/x86/mm/shadow/common.c b/xen/arch/x86/mm/shadow/common.c index 4b576ac063..adffa06c91 100644 --- a/xen/arch/x86/mm/shadow/common.c +++ b/xen/arch/x86/mm/shadow/common.c @@ -2437,10 +2437,13 @@ int sh_remove_all_mappings(struct vcpu *v, mfn_t gmfn) { /* Don't complain if we're in HVM and there are some extra mappings: * The qemu helper process has an untyped mapping of this dom's RAM - * and the HVM restore program takes another. */ + * and the HVM restore program takes another. + * Also allow one typed refcount for xenheap pages, to match + * share_xen_page_with_guest(). */ if ( !(shadow_mode_external(v->domain) && (page->count_info & PGC_count_mask) <= 3 - && (page->u.inuse.type_info & PGT_count_mask) == 0) ) + && ((page->u.inuse.type_info & PGT_count_mask) + == !!is_xen_heap_page(page))) ) { SHADOW_ERROR("can't find all mappings of mfn %lx: " "c=%08lx t=%08lx\n", mfn_x(gmfn), |