[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.1-testing] x86/mm/shadow: adjust early-unshadow heuristic for PAE guests.
# HG changeset patch # User Tim Deegan <Tim.Deegan@xxxxxxxxxx> # Date 1331112178 0 # Node ID b5051d40e1cca83dac690dae85f637afd8dc745e # Parent b0bf2fc4eff937bf82f0fc16e9e0079990e0c27e x86/mm/shadow: adjust early-unshadow heuristic for PAE guests. PAE guests have 8-byte PTEs but tend to clear memory with 4-byte writes. This means that when zeroing a former pagetable every second 4-byte write is unaligned and so the consecutive-zeroes --> unshadow heuristic never kicks in. Adjust the heuristic not to reset when a write is >= 4 bytes and writing zero but not PTE-aligned. Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx> xen-unstable changeset: 23554:c91255b2f0a0 xen-unstable date: Mon Jun 20 13:16:14 2011 +0100 --- diff -r b0bf2fc4eff9 -r b5051d40e1cc xen/arch/x86/mm/shadow/multi.c --- a/xen/arch/x86/mm/shadow/multi.c Wed Mar 07 08:43:28 2012 +0000 +++ b/xen/arch/x86/mm/shadow/multi.c Wed Mar 07 09:22:58 2012 +0000 @@ -4943,11 +4943,14 @@ ASSERT(mfn_valid(sh_ctxt->mfn1)); /* If we are writing lots of PTE-aligned zeros, might want to unshadow */ - if ( likely(bytes >= 4) - && (*(u32 *)addr == 0) - && ((unsigned long) addr & ((sizeof (guest_intpte_t)) - 1)) == 0 ) - check_for_early_unshadow(v, sh_ctxt->mfn1); - else + if ( likely(bytes >= 4) && (*(u32 *)addr == 0) ) + { + if ( ((unsigned long) addr & ((sizeof (guest_intpte_t)) - 1)) == 0 ) + check_for_early_unshadow(v, sh_ctxt->mfn1); + /* Don't reset the heuristic if we're writing zeros at non-aligned + * addresses, otherwise it doesn't catch REP MOVSD on PAE guests */ + } + else reset_early_unshadow(v); /* We can avoid re-verifying the page contents after the write if: _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |