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

[Xen-devel] [PATCH] tools/libxc: rename pfn_to_mfn to xc_pfn_to_mfn



Also refactor the contents of xc_pfn_to_mfn().  It is functionally identical,
but contains less lisp, fewer magic numbers, and more description of why 32bit
guests are treated differently.

Note that this does not affect pfn_to_mfn() in xc_domain_save.c  That was
already a macro which aliased pfn_to_mfn() in xg_private.h but without
actually using it.

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
---
 tools/libxc/xc_domain.c       |    4 ++--
 tools/libxc/xc_offline_page.c |    4 ++--
 tools/libxc/xg_private.h      |   18 ++++++++++++------
 3 files changed, 16 insertions(+), 10 deletions(-)

diff --git a/tools/libxc/xc_domain.c b/tools/libxc/xc_domain.c
index 26edbaf..ef470a5 100644
--- a/tools/libxc/xc_domain.c
+++ b/tools/libxc/xc_domain.c
@@ -1879,8 +1879,8 @@ int xc_map_domain_meminfo(xc_interface *xch, int domid,
         goto failed;
     }
     for ( i = 0; i < minfo->p2m_size; i++ )
-        minfo->pfn_type[i] = pfn_to_mfn(i, minfo->p2m_table,
-                                        minfo->guest_width);
+        minfo->pfn_type[i] = xc_pfn_to_mfn(i, minfo->p2m_table,
+                                           minfo->guest_width);
 
     /* Retrieve PFN types in batches */
     for ( i = 0; i < minfo->p2m_size ; i+=1024 )
diff --git a/tools/libxc/xc_offline_page.c b/tools/libxc/xc_offline_page.c
index 0b4cdf9..3147203 100644
--- a/tools/libxc/xc_offline_page.c
+++ b/tools/libxc/xc_offline_page.c
@@ -272,8 +272,8 @@ static int change_pte(xc_interface *xch, int domid,
 
     for (i = 0; i < minfo->p2m_size; i++)
     {
-        xen_pfn_t table_mfn = pfn_to_mfn(i, minfo->p2m_table,
-                                         minfo->guest_width);
+        xen_pfn_t table_mfn = xc_pfn_to_mfn(i, minfo->p2m_table,
+                                            minfo->guest_width);
         uint64_t pte, new_pte;
         int j;
 
diff --git a/tools/libxc/xg_private.h b/tools/libxc/xg_private.h
index f5755fd..e593364 100644
--- a/tools/libxc/xg_private.h
+++ b/tools/libxc/xg_private.h
@@ -132,13 +132,19 @@ struct domain_info_context {
     unsigned long p2m_size;
 };
 
-static inline xen_pfn_t pfn_to_mfn(xen_pfn_t pfn, xen_pfn_t *p2m, int gwidth)
+static inline xen_pfn_t xc_pfn_to_mfn(xen_pfn_t pfn, xen_pfn_t *p2m,
+                                      unsigned gwidth)
 {
-  return ((xen_pfn_t) ((gwidth==8)?
-                       (((uint64_t *)p2m)[(pfn)]):
-                       ((((uint32_t *)p2m)[(pfn)]) == 0xffffffffU ?
-                            (-1UL) :
-                            (((uint32_t *)p2m)[(pfn)]))));
+    if ( gwidth == sizeof(uint64_t) )
+        /* 64 bit guest.  Need to truncate their pfns for 32 bit toolstacks. */
+        return ((uint64_t *)p2m)[pfn];
+    else
+    {
+        /* 32 bit guest.  Need to expand INVALID_MFN for 64 bit toolstacks. */
+        uint32_t mfn = ((uint32_t *)p2m)[pfn];
+
+        return mfn == ~0U ? INVALID_MFN : mfn;
+    }
 }
 
 /* Number of xen_pfn_t in a page */
-- 
1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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