[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] shadow dirty-VRAM: avoid multiple remove_all_mappings calls.
# 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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |