[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.1-testing] x86: Fix shadow pinning logic (for PV live relo).
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1201620490 0 # Node ID 726e41786aa32bbb8964b5bd72217062d54c9269 # Parent d03ed9c63d33012d96ecab3a54fcb8e971e47806 x86: Fix shadow pinning logic (for PV live relo). From: Tim Deegan <Tim.Deegan@xxxxxxxxxx> Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx> xen-unstable changeset: 16930:193afcdb85b211d72f940e086397490ce72f06e6 xen-unstable date: Tue Jan 29 11:50:30 2008 +0000 --- xen/arch/x86/mm/shadow/multi.c | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-) diff -r d03ed9c63d33 -r 726e41786aa3 xen/arch/x86/mm/shadow/multi.c --- a/xen/arch/x86/mm/shadow/multi.c Tue Jan 29 15:27:44 2008 +0000 +++ b/xen/arch/x86/mm/shadow/multi.c Tue Jan 29 15:28:10 2008 +0000 @@ -3476,8 +3476,18 @@ sh_set_toplevel_shadow(struct vcpu *v, v->arch.shadow_table[slot] = new_entry; /* Decrement the refcount of the old contents of this slot */ - if ( !pagetable_is_null(old_entry) ) - sh_put_ref(v, pagetable_get_mfn(old_entry), 0); + if ( !pagetable_is_null(old_entry) ) { + mfn_t old_smfn = pagetable_get_mfn(old_entry); + /* Need to repin the old toplevel shadow if it's been unpinned + * by shadow_prealloc(): in PV mode we're still running on this + * shadow and it's not safe to free it yet. */ + if ( !mfn_to_shadow_page(old_smfn)->pinned && !sh_pin(v, old_smfn) ) + { + SHADOW_ERROR("can't re-pin %#lx\n", mfn_x(old_smfn)); + domain_crash(v->domain); + } + sh_put_ref(v, old_smfn, 0); + } } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |