tools/libxc: rename pfn_to_mfn to xc_pfn_to_mfn
authorAndrew Cooper <andrew.cooper3@citrix.com>
Wed, 18 Jun 2014 12:57:58 +0000 (13:57 +0100)
committerIan Campbell <ian.campbell@citrix.com>
Wed, 18 Jun 2014 15:22:49 +0000 (16:22 +0100)
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@citrix.com>
CC: Ian Campbell <Ian.Campbell@citrix.com>
CC: Ian Jackson <Ian.Jackson@eu.citrix.com>
Acked-by: Ian Campbell <ian.campbell@citrix.com>
tools/libxc/xc_domain.c
tools/libxc/xc_offline_page.c
tools/libxc/xg_private.h

index 26edbaf098eadd0f6b20a9fc5658213bc08fd6a9..ef470a5ba19e1157784958f69f03e56ccdca9023 100644 (file)
@@ -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 )
index 0b4cdf99cf98b0dd4989f1f37e5de4e29d399f58..31472030f556c2d2fa25462c4997e5997a6655ea 100644 (file)
@@ -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;
 
index f5755fdce2e3f37c904d7ea9cf53ac7967f000e0..e5933640b8649b797fef62b029439ec045a035ce 100644 (file)
@@ -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 */