diff options
author | Andres Lagar-Cavilla <andres@lagarcavilla.org> | 2012-01-26 13:21:27 +0000 |
---|---|---|
committer | Andres Lagar-Cavilla <andres@lagarcavilla.org> | 2012-01-26 13:21:27 +0000 |
commit | ad6c917d7da2cc1dbcb6c8aa19ee0f9866d76f4e (patch) | |
tree | 3ddc0c226b940210b884019543ff0cb7534d01ae /xen | |
parent | daf20794eda5d4b03d6cd6c7f59bd92d641af64d (diff) | |
download | xen-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.c | 4 |
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)) ) |