x86, shadow: Avoid duplicates in fixup tables.
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 18 Dec 2008 11:28:25 +0000 (11:28 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 18 Dec 2008 11:28:25 +0000 (11:28 +0000)
Avoid entering duplicates in fixup tables, reducing fixup evictions.

Signed-off-by: Gianluca Guida <gianluca.guida@eu.citrix.com>
xen/arch/x86/mm/shadow/common.c

index dd391cc6759d08c45950e73a19d0a6658950e456..837ed32f877a062b9d524cc3d8fe7b7335002f06 100644 (file)
@@ -627,6 +627,15 @@ void oos_fixup_add(struct vcpu *v, mfn_t gmfn,
             idx = (idx + 1) % SHADOW_OOS_PAGES;
         if ( mfn_x(oos[idx]) == mfn_x(gmfn) )
         {
+            int i;
+            for ( i = 0; i < SHADOW_OOS_FIXUPS; i++ )
+            {
+                if ( mfn_valid(oos_fixup[idx].smfn[i])
+                     && (mfn_x(oos_fixup[idx].smfn[i]) == mfn_x(smfn))
+                     && (oos_fixup[idx].off[i] == off) )
+                    return;
+            }
+
             next = oos_fixup[idx].next;
 
             if ( mfn_x(oos_fixup[idx].smfn[next]) != INVALID_MFN )