|
|
|
|
|
|
|
|
|
|
xen-changelog
[Xen-changelog] [xen-3.4-testing] Fix recursive lock p2m lock acquisitio
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1260181975 0
# Node ID 763ce108c23631e708db89dd6a1a399963eeb145
# Parent 9011437f2142390477d4e2845c6458e36f314e00
Fix recursive lock p2m lock acquisition in POD code
The POD code can take the p2m lock from inside a lookup. This causes
a crash if anyone calls gfn_to_mfn* with the p2m lock held, which is
quite a few places. Make the POD code understand that it may be
called with the lock held, and DTRT about talking or releasing it.
Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
xen-unstable changeset: 20269:fd3d5d66c446
xen-unstable date: Thu Oct 01 12:29:33 2009 +0100
---
xen/arch/x86/mm/p2m.c | 24 ++++++++++++++++--------
1 files changed, 16 insertions(+), 8 deletions(-)
diff -r 9011437f2142 -r 763ce108c236 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c Mon Dec 07 10:32:21 2009 +0000
+++ b/xen/arch/x86/mm/p2m.c Mon Dec 07 10:32:55 2009 +0000
@@ -1070,21 +1070,29 @@ static int p2m_pod_check_and_populate(st
l1_pgentry_t *p2m_entry, int order,
p2m_query_t q)
{
+ /* Only take the lock if we don't already have it. Otherwise it
+ * wouldn't be safe to do p2m lookups with the p2m lock held */
+ int do_locking = !p2m_locked_by_me(d->arch.p2m);
int r;
- p2m_lock(d->arch.p2m);
+
+ if ( do_locking )
+ p2m_lock(d->arch.p2m);
+
audit_p2m(d);
/* Check to make sure this is still PoD */
if ( p2m_flags_to_type(l1e_get_flags(*p2m_entry)) !=
p2m_populate_on_demand )
{
+ if ( do_locking )
+ p2m_unlock(d->arch.p2m);
+ return 0;
+ }
+
+ r = p2m_pod_demand_populate(d, gfn, order, q);
+
+ audit_p2m(d);
+ if ( do_locking )
p2m_unlock(d->arch.p2m);
- return 0;
- }
-
- r = p2m_pod_demand_populate(d, gfn, order, q);
-
- audit_p2m(d);
- p2m_unlock(d->arch.p2m);
return r;
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-3.4-testing] Fix recursive lock p2m lock acquisition in POD code,
Xen patchbot-3.4-testing <=
|
|
|
|
|