|   | 
      | 
  
  
      | 
      | 
  
 
     | 
    | 
  
  
     | 
    | 
  
  
    |   | 
      | 
  
  
    | 
         
xen-changelog
[Xen-changelog] [xen-unstable] shadow dirty-VRAM: avoid multiple	remove_
 
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1256559530 0
# Node ID 19d6d811bc152c954fa85a9a9004a0702cfc5055
# Parent  8ca4e32583b6ebaf7208df1bfd9dbc21b917e9a2
shadow dirty-VRAM: avoid multiple remove_all_mappings calls.
sh_remove_all_mappings() will walk roughly half of the shadow L1
tables for each MFN it's called with; calling it for every MFN in a
guest's framebuffer can be _very_ expensive, especially with the
shadow lock held across the whole operation.  Avoid that by just
blowing away all the shadows.
Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
---
 xen/arch/x86/mm/shadow/common.c |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)
diff -r 8ca4e32583b6 -r 19d6d811bc15 xen/arch/x86/mm/shadow/common.c
--- a/xen/arch/x86/mm/shadow/common.c   Fri Oct 23 10:15:17 2009 +0100
+++ b/xen/arch/x86/mm/shadow/common.c   Mon Oct 26 12:18:50 2009 +0000
@@ -3637,12 +3637,9 @@ int shadow_track_dirty_vram(struct domai
      * no need to be careful. */
     if ( !dirty_vram )
     {
-        /* Just recount from start. */
-        for ( i = begin_pfn; i < end_pfn; i++ ) {
-            mfn_t mfn = gfn_to_mfn(d, i, &t);
-            if (mfn_x(mfn) != INVALID_MFN)
-                flush_tlb |= sh_remove_all_mappings(d->vcpu[0], mfn);
-        }
+        /* Throw away all the shadows rather than walking through them 
+         * up to nr times getting rid of mappings of each pfn */
+        shadow_blow_tables(d);
 
         gdprintk(XENLOG_INFO, "tracking VRAM %lx - %lx\n", begin_pfn, end_pfn);
 
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
 |   
 
| <Prev in Thread] | 
Current Thread | 
[Next in Thread> |  
- [Xen-changelog] [xen-unstable] shadow dirty-VRAM: avoid multiple	remove_all_mappings calls.,
Xen patchbot-unstable <=
  
 |  
  
 | 
    | 
  
  
    |   | 
    |