[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] x86, hap: Track max_mapped_pfn better when using 2MB p2m mappings.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1224673100 -3600
# Node ID 96d8b7f40dc71aeb5f630fcedefd47e724aa3ec8
# Parent  066c84c7018accc44fbec78d3618d12147d7ab54
x86, hap: Track max_mapped_pfn better when using 2MB p2m mappings.

The test for when to increase it was not quite right; also on EPT
the value it was set to didn't count the top 511 frames.

Signed-off-by: Tim Deegan <Tim.Deegan@xxxxxxxxxx>
---
 xen/arch/x86/mm/hap/p2m-ept.c |    8 +++++---
 xen/arch/x86/mm/p2m.c         |    3 ++-
 2 files changed, 7 insertions(+), 4 deletions(-)

diff -r 066c84c7018a -r 96d8b7f40dc7 xen/arch/x86/mm/hap/p2m-ept.c
--- a/xen/arch/x86/mm/hap/p2m-ept.c     Wed Oct 22 11:56:44 2008 +0100
+++ b/xen/arch/x86/mm/hap/p2m-ept.c     Wed Oct 22 11:58:20 2008 +0100
@@ -157,9 +157,6 @@ ept_set_entry(struct domain *d, unsigned
     {
         if ( mfn_valid(mfn_x(mfn)) || (p2mt == p2m_mmio_direct) )
         {
-            /* Track the highest gfn for which we have ever had a valid 
mapping */
-            if ( gfn > d->arch.p2m->max_mapped_pfn )
-                d->arch.p2m->max_mapped_pfn = gfn;
             ept_entry->emt = epte_get_entry_emt(d, gfn, mfn_x(mfn));
             ept_entry->sp_avail = walk_level ? 1 : 0;
 
@@ -233,6 +230,11 @@ ept_set_entry(struct domain *d, unsigned
 
         unmap_domain_page(split_table);
     }
+
+    /* Track the highest gfn for which we have ever had a valid mapping */
+    if ( mfn_valid(mfn_x(mfn))
+         && (gfn + (1UL << order) - 1 > d->arch.p2m->max_mapped_pfn) )
+        d->arch.p2m->max_mapped_pfn = gfn + (1UL << order) - 1;
 
     /* Success */
     rv = 1;
diff -r 066c84c7018a -r 96d8b7f40dc7 xen/arch/x86/mm/p2m.c
--- a/xen/arch/x86/mm/p2m.c     Wed Oct 22 11:56:44 2008 +0100
+++ b/xen/arch/x86/mm/p2m.c     Wed Oct 22 11:58:20 2008 +0100
@@ -322,7 +322,8 @@ p2m_set_entry(struct domain *d, unsigned
     }
 
     /* Track the highest gfn for which we have ever had a valid mapping */
-    if ( mfn_valid(mfn) && (gfn > d->arch.p2m->max_mapped_pfn) )
+    if ( mfn_valid(mfn) 
+         && (gfn + (1UL << page_order) - 1 > d->arch.p2m->max_mapped_pfn) )
         d->arch.p2m->max_mapped_pfn = gfn + (1UL << page_order) - 1;
 
     if ( iommu_enabled && (is_hvm_domain(d) || need_iommu(d)) )

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.