From: Andres Lagar-Cavilla Date: Thu, 26 Jan 2012 13:21:27 +0000 (+0000) Subject: x86/mm: Fix p2m teardown locking X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=ad6c917d7da2cc1dbcb6c8aa19ee0f9866d76f4e;p=xen.git x86/mm: Fix p2m teardown locking Holding the p2m lock during a p2m teardown, while unsharing entries pointing to shared frames, causes a locking inversion and deadlock panic. Signed-off-by: Andres Lagar-Cavilla Acked-by: Tim Deegan Committed-by: Tim Deegan --- diff --git a/xen/arch/x86/mm/p2m.c b/xen/arch/x86/mm/p2m.c index eb43683a03..edcd09f24f 100644 --- a/xen/arch/x86/mm/p2m.c +++ b/xen/arch/x86/mm/p2m.c @@ -343,8 +343,6 @@ void p2m_teardown(struct p2m_domain *p2m) if (p2m == NULL) return; - p2m_lock(p2m); - #ifdef __x86_64__ for ( gfn=0; gfn < p2m->max_mapped_pfn; gfn++ ) { @@ -358,6 +356,8 @@ void p2m_teardown(struct p2m_domain *p2m) } #endif + p2m_lock(p2m); + p2m->phys_table = pagetable_null(); while ( (pg = page_list_remove_head(&p2m->pages)) )