aboutsummaryrefslogtreecommitdiffstats
path: root/xen
diff options
context:
space:
mode:
authorAndres Lagar-Cavilla <andres@lagarcavilla.org>2012-01-26 13:21:27 +0000
committerAndres Lagar-Cavilla <andres@lagarcavilla.org>2012-01-26 13:21:27 +0000
commitad6c917d7da2cc1dbcb6c8aa19ee0f9866d76f4e (patch)
tree3ddc0c226b940210b884019543ff0cb7534d01ae /xen
parentdaf20794eda5d4b03d6cd6c7f59bd92d641af64d (diff)
downloadxen-ad6c917d7da2cc1dbcb6c8aa19ee0f9866d76f4e.tar.gz
xen-ad6c917d7da2cc1dbcb6c8aa19ee0f9866d76f4e.tar.bz2
xen-ad6c917d7da2cc1dbcb6c8aa19ee0f9866d76f4e.zip
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 <andres@lagarcavilla.org> Acked-by: Tim Deegan <tim@xen.org> Committed-by: Tim Deegan <tim@xen.org>
Diffstat (limited to 'xen')
-rw-r--r--xen/arch/x86/mm/p2m.c4
1 files changed, 2 insertions, 2 deletions
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)) )