# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1175007810 -3600
# Node ID f1014cbe906a80d01a9321604a3bb32db7f5aec5
# Parent 070cf119a7ec6b62161022502cf8ec7563ebfd76
Further shrink the big-lock window.
A few more adjustments to when the 'big' lock is taken/dropped.
Also, fix a case where the foreign domain setting may not get properly
cleared at the end of a hypercall (in case of an early error).
Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/mm.c | 19 +++++++++++--------
1 files changed, 11 insertions(+), 8 deletions(-)
diff -r 070cf119a7ec -r f1014cbe906a xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Tue Mar 27 15:53:45 2007 +0100
+++ b/xen/arch/x86/mm.c Tue Mar 27 16:03:30 2007 +0100
@@ -2431,12 +2431,12 @@ int do_mmu_update(
guest_handle_add_offset(ureqs, 1);
}
+ process_deferred_ops();
+
+ UNLOCK_BIGLOCK(d);
+
domain_mmap_cache_destroy(&mapcache);
domain_mmap_cache_destroy(&sh_mapcache);
-
- process_deferred_ops();
-
- UNLOCK_BIGLOCK(d);
out:
/* Add incremental work we have done to the @done output parameter. */
@@ -2740,6 +2740,10 @@ int do_update_va_mapping(unsigned long v
guest_unmap_l1e(v, pl1e);
pl1e = NULL;
+ process_deferred_ops();
+
+ UNLOCK_BIGLOCK(d);
+
switch ( flags & UVMF_FLUSHTYPE_MASK )
{
case UVMF_TLB_FLUSH:
@@ -2785,10 +2789,6 @@ int do_update_va_mapping(unsigned long v
break;
}
- process_deferred_ops();
-
- UNLOCK_BIGLOCK(d);
-
return rc;
}
@@ -2805,6 +2805,9 @@ int do_update_va_mapping_otherdomain(uns
return -ESRCH;
rc = do_update_va_mapping(va, val64, flags);
+
+ BUG_ON(this_cpu(percpu_mm_info).deferred_ops);
+ process_deferred_ops(); /* only to clear foreigndom */
return rc;
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|