xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t
@ 2017-08-18 10:27 Andrew Cooper
  2017-08-18 10:27 ` [PATCH 2/2] x86/smp: Misc cleanup Andrew Cooper
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Andrew Cooper @ 2017-08-18 10:27 UTC (permalink / raw)
  To: Xen-devel; +Cc: George Dunlap, Andrew Cooper, Wei Liu, Jan Beulich, Tim Deegan

To avoid breaking the build elsewhere, the l{1..4}e_{from,get}_page() macros
are switched to using __mfn_to_page() and __page_to_mfn().

Most changes are wrapping or removing _mfn()/mfn_x() from existing callsites.

However, {alloc,free}_l1_table() are switched to using __map_domain_page(), as
their pfn parameters are otherwise unused.  get_page() has one pfn->mfn
correction in a printk(), and __get_page_type()'s IOMMU handling has its gfn
calculation broken out for clarity.

No functional change.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
CC: George Dunlap <george.dunlap@eu.citrix.com>
CC: Tim Deegan <tim@xen.org>
---
 xen/arch/x86/mm.c          | 151 ++++++++++++++++++++++++---------------------
 xen/include/asm-x86/page.h |  16 ++---
 2 files changed, 88 insertions(+), 79 deletions(-)

diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index 31fe8a1..e862380 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -123,6 +123,12 @@
 #include <asm/io_apic.h>
 #include <asm/pci.h>
 
+/* Override macros from asm/mm.h to make them work with mfn_t */
+#undef mfn_to_page
+#define mfn_to_page(mfn) __mfn_to_page(mfn_x(mfn))
+#undef page_to_mfn
+#define page_to_mfn(pg) _mfn(__page_to_mfn(pg))
+
 /* Mapping of the fixmap space needed early. */
 l1_pgentry_t __section(".bss.page_aligned") __aligned(PAGE_SIZE)
     l1_fixmap[L1_PAGETABLE_ENTRIES];
@@ -282,7 +288,8 @@ void __init arch_init_memory(void)
 
     /* First 1MB of RAM is historically marked as I/O. */
     for ( i = 0; i < 0x100; i++ )
-        share_xen_page_with_guest(mfn_to_page(i), dom_io, XENSHARE_writable);
+        share_xen_page_with_guest(mfn_to_page(_mfn(i)),
+                                  dom_io, XENSHARE_writable);
 
     /* Any areas not specified as RAM by the e820 map are considered I/O. */
     for ( i = 0, pfn = 0; pfn < max_page; i++ )
@@ -323,7 +330,7 @@ void __init arch_init_memory(void)
             if ( !mfn_valid(_mfn(pfn)) )
                 continue;
             share_xen_page_with_guest(
-                mfn_to_page(pfn), dom_io, XENSHARE_writable);
+                mfn_to_page(_mfn(pfn)), dom_io, XENSHARE_writable);
         }
 
         /* Skip the RAM region. */
@@ -425,7 +432,7 @@ void share_xen_page_with_guest(
     if ( page_get_owner(page) == d )
         return;
 
-    set_gpfn_from_mfn(page_to_mfn(page), INVALID_M2P_ENTRY);
+    set_gpfn_from_mfn(mfn_x(page_to_mfn(page)), INVALID_M2P_ENTRY);
 
     spin_lock(&d->page_alloc_lock);
 
@@ -682,7 +689,8 @@ int map_ldt_shadow_page(unsigned int off)
         return 0;
     }
 
-    nl1e = l1e_from_pfn(page_to_mfn(page), l1e_get_flags(l1e) | _PAGE_RW);
+    nl1e = l1e_from_pfn(mfn_x(page_to_mfn(page)),
+                        l1e_get_flags(l1e) | _PAGE_RW);
 
     spin_lock(&v->arch.pv_vcpu.shadow_ldt_lock);
     l1e_write(&gdt_ldt_ptes(d, v)[off + 16], nl1e);
@@ -695,7 +703,7 @@ int map_ldt_shadow_page(unsigned int off)
 
 static bool get_page_from_mfn(mfn_t mfn, struct domain *d)
 {
-    struct page_info *page = mfn_to_page(mfn_x(mfn));
+    struct page_info *page = mfn_to_page(mfn);
 
     if ( unlikely(!mfn_valid(mfn)) || unlikely(!get_page(page, d)) )
     {
@@ -712,7 +720,7 @@ static int get_page_and_type_from_mfn(
     mfn_t mfn, unsigned long type, struct domain *d,
     int partial, int preemptible)
 {
-    struct page_info *page = mfn_to_page(mfn_x(mfn));
+    struct page_info *page = mfn_to_page(mfn);
     int rc;
 
     if ( likely(partial >= 0) &&
@@ -777,7 +785,7 @@ get_##level##_linear_pagetable(                                             \
          * Ensure that the mapped frame is an already-validated page table. \
          * If so, atomically increment the count (checking for overflow).   \
          */                                                                 \
-        page = mfn_to_page(pfn);                                            \
+        page = mfn_to_page(_mfn(pfn));                                      \
         y = page->u.inuse.type_info;                                        \
         do {                                                                \
             x = y;                                                          \
@@ -804,7 +812,7 @@ bool is_iomem_page(mfn_t mfn)
         return true;
 
     /* Caller must know that it is an iomem page, or a reference is held. */
-    page = mfn_to_page(mfn_x(mfn));
+    page = mfn_to_page(mfn);
     ASSERT((page->count_info & PGC_count_mask) != 0);
 
     return (page_get_owner(page) == dom_io);
@@ -873,7 +881,7 @@ get_page_from_l1e(
     l1_pgentry_t l1e, struct domain *l1e_owner, struct domain *pg_owner)
 {
     unsigned long mfn = l1e_get_pfn(l1e);
-    struct page_info *page = mfn_to_page(mfn);
+    struct page_info *page = mfn_to_page(_mfn(mfn));
     uint32_t l1f = l1e_get_flags(l1e);
     struct vcpu *curr = current;
     struct domain *real_pg_owner;
@@ -1219,7 +1227,7 @@ void put_page_from_l1e(l1_pgentry_t l1e, struct domain *l1e_owner)
     if ( !(l1e_get_flags(l1e) & _PAGE_PRESENT) || is_iomem_page(_mfn(pfn)) )
         return;
 
-    page = mfn_to_page(pfn);
+    page = mfn_to_page(_mfn(pfn));
     pg_owner = page_get_owner(page);
 
     /*
@@ -1280,7 +1288,7 @@ static int put_page_from_l2e(l2_pgentry_t l2e, unsigned long pfn)
 
     if ( l2e_get_flags(l2e) & _PAGE_PSE )
     {
-        struct page_info *page = mfn_to_page(l2e_get_pfn(l2e));
+        struct page_info *page = mfn_to_page(_mfn(l2e_get_pfn(l2e)));
         unsigned int i;
 
         for ( i = 0; i < (1u << PAGETABLE_ORDER); i++, page++ )
@@ -1308,7 +1316,7 @@ static int put_page_from_l3e(l3_pgentry_t l3e, unsigned long pfn,
 
         ASSERT(!(mfn & ((1UL << (L3_PAGETABLE_SHIFT - PAGE_SHIFT)) - 1)));
         do {
-            put_data_page(mfn_to_page(mfn), writeable);
+            put_data_page(mfn_to_page(_mfn(mfn)), writeable);
         } while ( ++mfn & ((1UL << (L3_PAGETABLE_SHIFT - PAGE_SHIFT)) - 1) );
 
         return 0;
@@ -1359,12 +1367,11 @@ static int put_page_from_l4e(l4_pgentry_t l4e, unsigned long pfn,
 static int alloc_l1_table(struct page_info *page)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long  pfn = page_to_mfn(page);
     l1_pgentry_t  *pl1e;
     unsigned int   i;
     int            ret = 0;
 
-    pl1e = map_domain_page(_mfn(pfn));
+    pl1e = __map_domain_page(page);
 
     for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ )
     {
@@ -1439,7 +1446,7 @@ static int alloc_l2_table(struct page_info *page, unsigned long type,
                           int preemptible)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long  pfn = page_to_mfn(page);
+    unsigned long  pfn = mfn_x(page_to_mfn(page));
     l2_pgentry_t  *pl2e;
     unsigned int   i;
     int            rc = 0;
@@ -1488,7 +1495,7 @@ static int alloc_l2_table(struct page_info *page, unsigned long type,
 static int alloc_l3_table(struct page_info *page)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long  pfn = page_to_mfn(page);
+    unsigned long  pfn = mfn_x(page_to_mfn(page));
     l3_pgentry_t  *pl3e;
     unsigned int   i;
     int            rc = 0, partial = page->partial_pte;
@@ -1609,7 +1616,7 @@ void zap_ro_mpt(unsigned long mfn)
 static int alloc_l4_table(struct page_info *page)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long  pfn = page_to_mfn(page);
+    unsigned long  pfn = mfn_x(page_to_mfn(page));
     l4_pgentry_t  *pl4e = map_domain_page(_mfn(pfn));
     unsigned int   i;
     int            rc = 0, partial = page->partial_pte;
@@ -1668,11 +1675,10 @@ static int alloc_l4_table(struct page_info *page)
 static void free_l1_table(struct page_info *page)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long pfn = page_to_mfn(page);
     l1_pgentry_t *pl1e;
     unsigned int  i;
 
-    pl1e = map_domain_page(_mfn(pfn));
+    pl1e = __map_domain_page(page);
 
     for ( i = 0; i < L1_PAGETABLE_ENTRIES; i++ )
         put_page_from_l1e(pl1e[i], d);
@@ -1684,7 +1690,7 @@ static void free_l1_table(struct page_info *page)
 static int free_l2_table(struct page_info *page, int preemptible)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long pfn = page_to_mfn(page);
+    unsigned long pfn = mfn_x(page_to_mfn(page));
     l2_pgentry_t *pl2e;
     unsigned int  i = page->nr_validated_ptes - 1;
     int err = 0;
@@ -1713,7 +1719,7 @@ static int free_l2_table(struct page_info *page, int preemptible)
 static int free_l3_table(struct page_info *page)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long pfn = page_to_mfn(page);
+    unsigned long pfn = mfn_x(page_to_mfn(page));
     l3_pgentry_t *pl3e;
     int rc = 0, partial = page->partial_pte;
     unsigned int  i = page->nr_validated_ptes - !partial;
@@ -1752,7 +1758,7 @@ static int free_l3_table(struct page_info *page)
 static int free_l4_table(struct page_info *page)
 {
     struct domain *d = page_get_owner(page);
-    unsigned long pfn = page_to_mfn(page);
+    unsigned long pfn = mfn_x(page_to_mfn(page));
     l4_pgentry_t *pl4e = map_domain_page(_mfn(pfn));
     int rc = 0, partial = page->partial_pte;
     unsigned int  i = page->nr_validated_ptes - !partial;
@@ -1911,7 +1917,7 @@ static int mod_l1_entry(l1_pgentry_t *pl1e, l1_pgentry_t nl1e,
             page = get_page_from_gfn(pg_dom, l1e_get_pfn(nl1e), NULL, P2M_ALLOC);
             if ( !page )
                 return -EINVAL;
-            nl1e = l1e_from_pfn(page_to_mfn(page), l1e_get_flags(nl1e));
+            nl1e = l1e_from_pfn(mfn_x(page_to_mfn(page)), l1e_get_flags(nl1e));
         }
 
         /* Fast path for sufficiently-similar mappings. */
@@ -1970,7 +1976,7 @@ static int mod_l2_entry(l2_pgentry_t *pl2e,
 {
     l2_pgentry_t ol2e;
     struct domain *d = vcpu->domain;
-    struct page_info *l2pg = mfn_to_page(pfn);
+    struct page_info *l2pg = mfn_to_page(_mfn(pfn));
     unsigned long type = l2pg->u.inuse.type_info;
     int rc = 0;
 
@@ -2168,7 +2174,7 @@ static int cleanup_page_cacheattr(struct page_info *page)
 
     BUG_ON(is_xen_heap_page(page));
 
-    return update_xen_mappings(page_to_mfn(page), 0);
+    return update_xen_mappings(mfn_x(page_to_mfn(page)), 0);
 }
 
 void put_page(struct page_info *page)
@@ -2188,7 +2194,7 @@ void put_page(struct page_info *page)
             free_domheap_page(page);
         else
             gdprintk(XENLOG_WARNING,
-                     "Leaking mfn %" PRI_pfn "\n", page_to_mfn(page));
+                     "Leaking mfn %" PRI_mfn "\n", mfn_x(page_to_mfn(page)));
     }
 }
 
@@ -2226,8 +2232,8 @@ int get_page(struct page_info *page, struct domain *domain)
 
     if ( !paging_mode_refcounts(domain) && !domain->is_dying )
         gprintk(XENLOG_INFO,
-                "Error pfn %lx: rd=%d od=%d caf=%08lx taf=%" PRtype_info "\n",
-                page_to_mfn(page), domain->domain_id,
+                "Error mfn %"PRI_mfn": rd=%d od=%d caf=%08lx taf=%" PRtype_info "\n",
+                mfn_x(page_to_mfn(page)), domain->domain_id,
                 owner ? owner->domain_id : DOMID_INVALID,
                 page->count_info - !!owner, page->u.inuse.type_info);
 
@@ -2267,7 +2273,7 @@ static int alloc_page_type(struct page_info *page, unsigned long type,
 
     /* A page table is dirtied when its type count becomes non-zero. */
     if ( likely(owner != NULL) )
-        paging_mark_dirty(owner, _mfn(page_to_mfn(page)));
+        paging_mark_dirty(owner, page_to_mfn(page));
 
     switch ( type & PGT_type_mask )
     {
@@ -2313,7 +2319,8 @@ static int alloc_page_type(struct page_info *page, unsigned long type,
         gdprintk(XENLOG_WARNING, "Error while validating mfn %" PRI_mfn
                  " (pfn %" PRI_pfn ") for type %" PRtype_info
                  ": caf=%08lx taf=%" PRtype_info "\n",
-                 page_to_mfn(page), get_gpfn_from_mfn(page_to_mfn(page)),
+                 mfn_x(page_to_mfn(page)),
+                 get_gpfn_from_mfn(mfn_x(page_to_mfn(page))),
                  type, page->count_info, page->u.inuse.type_info);
         if ( page != current->arch.old_guest_table )
             page->u.inuse.type_info = 0;
@@ -2342,11 +2349,11 @@ int free_page_type(struct page_info *page, unsigned long type,
     if ( likely(owner != NULL) && unlikely(paging_mode_enabled(owner)) )
     {
         /* A page table is dirtied when its type count becomes zero. */
-        paging_mark_dirty(owner, _mfn(page_to_mfn(page)));
+        paging_mark_dirty(owner, page_to_mfn(page));
 
         ASSERT(!shadow_mode_refcounts(owner));
 
-        gmfn = mfn_to_gmfn(owner, page_to_mfn(page));
+        gmfn = mfn_to_gmfn(owner, mfn_x(page_to_mfn(page)));
         ASSERT(VALID_M2P(gmfn));
         /* Page sharing not supported for shadowed domains */
         if(!SHARED_M2P(gmfn))
@@ -2378,7 +2385,7 @@ int free_page_type(struct page_info *page, unsigned long type,
         break;
     default:
         gdprintk(XENLOG_WARNING, "type %" PRtype_info " mfn %" PRI_mfn "\n",
-                 type, page_to_mfn(page));
+                 type, mfn_x(page_to_mfn(page)));
         rc = -EINVAL;
         BUG();
     }
@@ -2484,7 +2491,7 @@ static int __get_page_type(struct page_info *page, unsigned long type,
         {
             gdprintk(XENLOG_WARNING,
                      "Type count overflow on mfn %"PRI_mfn"\n",
-                     page_to_mfn(page));
+                     mfn_x(page_to_mfn(page)));
             return -EINVAL;
         }
         else if ( unlikely((x & PGT_count_mask) == 0) )
@@ -2501,7 +2508,7 @@ static int __get_page_type(struct page_info *page, unsigned long type,
                  && (page->count_info & PGC_page_table)
                  && !((page->shadow_flags & (1u<<29))
                       && type == PGT_writable_page) )
-               shadow_remove_all_shadows(d, _mfn(page_to_mfn(page)));
+               shadow_remove_all_shadows(d, page_to_mfn(page));
 
             ASSERT(!(x & PGT_pae_xen_l2));
             if ( (x & PGT_type_mask) != type )
@@ -2555,8 +2562,8 @@ static int __get_page_type(struct page_info *page, unsigned long type,
             gdprintk(XENLOG_WARNING,
                      "Bad type (saw %" PRtype_info " != exp %" PRtype_info ") "
                      "for mfn %" PRI_mfn " (pfn %" PRI_pfn ")\n",
-                     x, type, page_to_mfn(page),
-                     get_gpfn_from_mfn(page_to_mfn(page)));
+                     x, type, mfn_x(page_to_mfn(page)),
+                     get_gpfn_from_mfn(mfn_x(page_to_mfn(page))));
             return -EINVAL;
         }
         else if ( unlikely(!(x & PGT_validated)) )
@@ -2590,11 +2597,13 @@ static int __get_page_type(struct page_info *page, unsigned long type,
         struct domain *d = page_get_owner(page);
         if ( d && is_pv_domain(d) && unlikely(need_iommu(d)) )
         {
+            gfn_t gfn = _gfn(mfn_to_gmfn(d, mfn_x(page_to_mfn(page))));
+
             if ( (x & PGT_type_mask) == PGT_writable_page )
-                iommu_ret = iommu_unmap_page(d, mfn_to_gmfn(d, page_to_mfn(page)));
+                iommu_ret = iommu_unmap_page(d, gfn_x(gfn));
             else if ( type == PGT_writable_page )
-                iommu_ret = iommu_map_page(d, mfn_to_gmfn(d, page_to_mfn(page)),
-                                           page_to_mfn(page),
+                iommu_ret = iommu_map_page(d, gfn_x(gfn),
+                                           mfn_x(page_to_mfn(page)),
                                            IOMMUF_readable|IOMMUF_writable);
         }
     }
@@ -2682,7 +2691,7 @@ int vcpu_destroy_pagetables(struct vcpu *v)
 
     if ( mfn )
     {
-        page = mfn_to_page(mfn);
+        page = mfn_to_page(_mfn(mfn));
         if ( paging_mode_refcounts(v->domain) )
             put_page(page);
         else
@@ -2703,7 +2712,7 @@ int vcpu_destroy_pagetables(struct vcpu *v)
         mfn = pagetable_get_pfn(v->arch.guest_table_user);
         if ( mfn )
         {
-            page = mfn_to_page(mfn);
+            page = mfn_to_page(_mfn(mfn));
             if ( paging_mode_refcounts(v->domain) )
                 put_page(page);
             else
@@ -2802,7 +2811,7 @@ int new_guest_cr3(unsigned long mfn)
 
     if ( likely(old_base_mfn != 0) )
     {
-        struct page_info *page = mfn_to_page(old_base_mfn);
+        struct page_info *page = mfn_to_page(_mfn(old_base_mfn));
 
         if ( paging_mode_refcounts(d) )
             put_page(page);
@@ -3041,7 +3050,7 @@ long do_mmuext_op(
                 else if ( rc != -ERESTART )
                     gdprintk(XENLOG_WARNING,
                              "Error %d while pinning mfn %" PRI_mfn "\n",
-                            rc, page_to_mfn(page));
+                             rc, mfn_x(page_to_mfn(page)));
                 if ( page != curr->arch.old_guest_table )
                     put_page(page);
                 break;
@@ -3052,7 +3061,8 @@ long do_mmuext_op(
                                                   &page->u.inuse.type_info)) )
             {
                 gdprintk(XENLOG_WARNING,
-                         "mfn %" PRI_mfn " already pinned\n", page_to_mfn(page));
+                         "mfn %" PRI_mfn " already pinned\n",
+                         mfn_x(page_to_mfn(page)));
                 rc = -EINVAL;
             }
 
@@ -3060,7 +3070,7 @@ long do_mmuext_op(
                 goto pin_drop;
 
             /* A page is dirtied when its pin status is set. */
-            paging_mark_dirty(pg_owner, _mfn(page_to_mfn(page)));
+            paging_mark_dirty(pg_owner, page_to_mfn(page));
 
             /* We can race domain destruction (domain_relinquish_resources). */
             if ( unlikely(pg_owner != currd) )
@@ -3120,7 +3130,7 @@ long do_mmuext_op(
             put_page(page);
 
             /* A page is dirtied when its pin status is cleared. */
-            paging_mark_dirty(pg_owner, _mfn(page_to_mfn(page)));
+            paging_mark_dirty(pg_owner, page_to_mfn(page));
             break;
 
         case MMUEXT_NEW_BASEPTR:
@@ -3174,7 +3184,7 @@ long do_mmuext_op(
 
             if ( old_mfn != 0 )
             {
-                page = mfn_to_page(old_mfn);
+                page = mfn_to_page(_mfn(old_mfn));
 
                 switch ( rc = put_page_and_type_preemptible(page) )
                 {
@@ -3318,9 +3328,9 @@ long do_mmuext_op(
             }
 
             /* A page is dirtied when it's being cleared. */
-            paging_mark_dirty(pg_owner, _mfn(page_to_mfn(page)));
+            paging_mark_dirty(pg_owner, page_to_mfn(page));
 
-            clear_domain_page(_mfn(page_to_mfn(page)));
+            clear_domain_page(page_to_mfn(page));
 
             put_page_and_type(page);
             break;
@@ -3365,10 +3375,9 @@ long do_mmuext_op(
             }
 
             /* A page is dirtied when it's being copied to. */
-            paging_mark_dirty(pg_owner, _mfn(page_to_mfn(dst_page)));
+            paging_mark_dirty(pg_owner, page_to_mfn(dst_page));
 
-            copy_domain_page(_mfn(page_to_mfn(dst_page)),
-                             _mfn(page_to_mfn(src_page)));
+            copy_domain_page(page_to_mfn(dst_page), page_to_mfn(src_page));
 
             put_page_and_type(dst_page);
             put_page(src_page);
@@ -3566,7 +3575,7 @@ long do_mmu_update(
                 break;
             }
 
-            mfn = page_to_mfn(page);
+            mfn = mfn_x(page_to_mfn(page));
 
             if ( !mfn_eq(_mfn(mfn), map_mfn) )
             {
@@ -3694,7 +3703,7 @@ long do_mmu_update(
 
             paging_mark_dirty(pg_owner, _mfn(mfn));
 
-            put_page(mfn_to_page(mfn));
+            put_page(mfn_to_page(_mfn(mfn)));
             break;
 
         default:
@@ -3777,7 +3786,7 @@ static int create_grant_pte_mapping(
         return GNTST_general_error;
     }
 
-    mfn = page_to_mfn(page);
+    mfn = mfn_x(page_to_mfn(page));
     va = map_domain_page(_mfn(mfn));
     va = (void *)((unsigned long)va + ((unsigned long)pte_addr & ~PAGE_MASK));
 
@@ -3841,7 +3850,7 @@ static int destroy_grant_pte_mapping(
         return GNTST_general_error;
     }
 
-    mfn = page_to_mfn(page);
+    mfn = mfn_x(page_to_mfn(page));
     va = map_domain_page(_mfn(mfn));
     va = (void *)((unsigned long)va + ((unsigned long)addr & ~PAGE_MASK));
 
@@ -3916,7 +3925,7 @@ static int create_grant_va_mapping(
         return GNTST_general_error;
     }
 
-    l1pg = mfn_to_page(gl1mfn);
+    l1pg = mfn_to_page(_mfn(gl1mfn));
     if ( !page_lock(l1pg) )
     {
         put_page(l1pg);
@@ -3966,7 +3975,7 @@ static int replace_grant_va_mapping(
         goto out;
     }
 
-    l1pg = mfn_to_page(gl1mfn);
+    l1pg = mfn_to_page(_mfn(gl1mfn));
     if ( !page_lock(l1pg) )
     {
         rc = GNTST_general_error;
@@ -4135,7 +4144,7 @@ int replace_grant_host_mapping(
         return GNTST_general_error;
     }
 
-    l1pg = mfn_to_page(gl1mfn);
+    l1pg = mfn_to_page(_mfn(gl1mfn));
     if ( !page_lock(l1pg) )
     {
         put_page(l1pg);
@@ -4208,7 +4217,7 @@ int donate_page(
     spin_unlock(&d->page_alloc_lock);
     gdprintk(XENLOG_WARNING, "Bad donate mfn %" PRI_mfn
              " to d%d (owner d%d) caf=%08lx taf=%" PRtype_info "\n",
-             page_to_mfn(page), d->domain_id,
+             mfn_x(page_to_mfn(page)), d->domain_id,
              owner ? owner->domain_id : DOMID_INVALID,
              page->count_info, page->u.inuse.type_info);
     return -EINVAL;
@@ -4274,7 +4283,7 @@ int steal_page(
     spin_unlock(&d->page_alloc_lock);
     gdprintk(XENLOG_WARNING, "Bad steal mfn %" PRI_mfn
              " from d%d (owner d%d) caf=%08lx taf=%" PRtype_info "\n",
-             page_to_mfn(page), d->domain_id,
+             mfn_x(page_to_mfn(page)), d->domain_id,
              owner ? owner->domain_id : DOMID_INVALID,
              page->count_info, page->u.inuse.type_info);
     return -EINVAL;
@@ -4303,7 +4312,7 @@ static int __do_update_va_mapping(
     if ( unlikely(!pl1e || !get_page_from_mfn(_mfn(gl1mfn), d)) )
         goto out;
 
-    gl1pg = mfn_to_page(gl1mfn);
+    gl1pg = mfn_to_page(_mfn(gl1mfn));
     if ( !page_lock(gl1pg) )
     {
         put_page(gl1pg);
@@ -4413,7 +4422,7 @@ void destroy_gdt(struct vcpu *v)
     {
         pfn = l1e_get_pfn(pl1e[i]);
         if ( (l1e_get_flags(pl1e[i]) & _PAGE_PRESENT) && pfn != zero_pfn )
-            put_page_and_type(mfn_to_page(pfn));
+            put_page_and_type(mfn_to_page(_mfn(pfn)));
         l1e_write(&pl1e[i], l1e_from_pfn(zero_pfn, __PAGE_HYPERVISOR_RO));
         v->arch.pv_vcpu.gdt_frames[i] = 0;
     }
@@ -4445,7 +4454,7 @@ long set_gdt(struct vcpu *v,
             put_page(page);
             goto fail;
         }
-        frames[i] = page_to_mfn(page);
+        frames[i] = mfn_x(page_to_mfn(page));
     }
 
     /* Tear down the old GDT. */
@@ -4465,7 +4474,7 @@ long set_gdt(struct vcpu *v,
  fail:
     while ( i-- > 0 )
     {
-        put_page_and_type(mfn_to_page(frames[i]));
+        put_page_and_type(mfn_to_page(_mfn(frames[i])));
     }
     return -EINVAL;
 }
@@ -4520,7 +4529,7 @@ long do_update_descriptor(u64 pa, u64 desc)
             put_page(page);
         return -EINVAL;
     }
-    mfn = page_to_mfn(page);
+    mfn = mfn_x(page_to_mfn(page));
 
     /* Check if the given frame is in use in an unsafe context. */
     switch ( page->u.inuse.type_info & PGT_type_mask )
@@ -4675,7 +4684,7 @@ int xenmem_add_to_physmap_one(
             if ( !get_page_from_mfn(_mfn(idx), d) )
                 break;
             mfn = idx;
-            page = mfn_to_page(mfn);
+            page = mfn_to_page(_mfn(mfn));
             break;
         }
         case XENMAPSPACE_gmfn_foreign:
@@ -5044,7 +5053,7 @@ static int ptwr_emulated_update(
 
     pte  = ptwr_ctxt->pte;
     mfn  = l1e_get_pfn(pte);
-    page = mfn_to_page(mfn);
+    page = mfn_to_page(_mfn(mfn));
 
     /* We are looking only for read-only mappings of p.t. pages. */
     ASSERT((l1e_get_flags(pte) & (_PAGE_RW|_PAGE_PRESENT)) == _PAGE_PRESENT);
@@ -5371,7 +5380,7 @@ int mmio_ro_do_page_fault(struct vcpu *v, unsigned long addr,
     mfn = l1e_get_pfn(pte);
     if ( mfn_valid(_mfn(mfn)) )
     {
-        struct page_info *page = mfn_to_page(mfn);
+        struct page_info *page = mfn_to_page(_mfn(mfn));
         struct domain *owner = page_get_owner_and_reference(page);
 
         if ( owner )
@@ -6212,7 +6221,7 @@ int create_perdomain_mapping(struct domain *d, unsigned long va,
             pg = alloc_domheap_page(d, MEMF_no_owner);
             if ( pg )
             {
-                clear_domain_page(_mfn(page_to_mfn(pg)));
+                clear_domain_page(page_to_mfn(pg));
                 if ( !IS_NIL(ppg) )
                     *ppg++ = pg;
                 l1tab[l1_table_offset(va)] =
diff --git a/xen/include/asm-x86/page.h b/xen/include/asm-x86/page.h
index 263ca5b..33df219 100644
--- a/xen/include/asm-x86/page.h
+++ b/xen/include/asm-x86/page.h
@@ -82,10 +82,10 @@
     ((paddr_t)(((x).l4 & (PADDR_MASK&PAGE_MASK))))
 
 /* Get pointer to info structure of page mapped by pte (struct page_info *). */
-#define l1e_get_page(x)           (mfn_to_page(l1e_get_pfn(x)))
-#define l2e_get_page(x)           (mfn_to_page(l2e_get_pfn(x)))
-#define l3e_get_page(x)           (mfn_to_page(l3e_get_pfn(x)))
-#define l4e_get_page(x)           (mfn_to_page(l4e_get_pfn(x)))
+#define l1e_get_page(x)           (__mfn_to_page(l1e_get_pfn(x)))
+#define l2e_get_page(x)           (__mfn_to_page(l2e_get_pfn(x)))
+#define l3e_get_page(x)           (__mfn_to_page(l3e_get_pfn(x)))
+#define l4e_get_page(x)           (__mfn_to_page(l4e_get_pfn(x)))
 
 /* Get pte access flags (unsigned int). */
 #define l1e_get_flags(x)           (get_pte_flags((x).l1))
@@ -145,10 +145,10 @@ static inline l4_pgentry_t l4e_from_paddr(paddr_t pa, unsigned int flags)
 #define l4e_from_intpte(intpte)    ((l4_pgentry_t) { (intpte_t)(intpte) })
 
 /* Construct a pte from a page pointer and access flags. */
-#define l1e_from_page(page, flags) (l1e_from_pfn(page_to_mfn(page),(flags)))
-#define l2e_from_page(page, flags) (l2e_from_pfn(page_to_mfn(page),(flags)))
-#define l3e_from_page(page, flags) (l3e_from_pfn(page_to_mfn(page),(flags)))
-#define l4e_from_page(page, flags) (l4e_from_pfn(page_to_mfn(page),(flags)))
+#define l1e_from_page(page, flags) (l1e_from_pfn(__page_to_mfn(page), (flags)))
+#define l2e_from_page(page, flags) (l2e_from_pfn(__page_to_mfn(page), (flags)))
+#define l3e_from_page(page, flags) (l3e_from_pfn(__page_to_mfn(page), (flags)))
+#define l4e_from_page(page, flags) (l4e_from_pfn(__page_to_mfn(page), (flags)))
 
 /* Add extra flags to an existing pte. */
 #define l1e_add_flags(x, flags)    ((x).l1 |= put_pte_flags(flags))
-- 
2.1.4


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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] x86/smp: Misc cleanup
  2017-08-18 10:27 [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t Andrew Cooper
@ 2017-08-18 10:27 ` Andrew Cooper
  2017-08-18 11:52   ` Wei Liu
  2017-08-18 12:17   ` Jan Beulich
  2017-08-18 11:51 ` [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t Wei Liu
  2017-08-18 12:16 ` Jan Beulich
  2 siblings, 2 replies; 7+ messages in thread
From: Andrew Cooper @ 2017-08-18 10:27 UTC (permalink / raw)
  To: Xen-devel; +Cc: Andrew Cooper, Wei Liu, Jan Beulich

 * Delete trailing whitespace
 * Switch to using mfn_t for mfn_to_page()/page_to_mfn()

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
---
CC: Jan Beulich <JBeulich@suse.com>
CC: Wei Liu <wei.liu2@citrix.com>
---
 xen/arch/x86/smpboot.c | 32 +++++++++++++++++++-------------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c
index 8d91f6c..4d45f42 100644
--- a/xen/arch/x86/smpboot.c
+++ b/xen/arch/x86/smpboot.c
@@ -4,17 +4,17 @@
  * This inherits a great deal from Linux's SMP boot code:
  *  (c) 1995 Alan Cox, Building #3 <alan@redhat.com>
  *  (c) 1998, 1999, 2000 Ingo Molnar <mingo@redhat.com>
- * 
+ *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
  * (at your option) any later version.
- * 
+ *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
- * 
+ *
  * You should have received a copy of the GNU General Public License
  * along with this program; If not, see <http://www.gnu.org/licenses/>.
  */
@@ -46,6 +46,12 @@
 #include <mach_wakecpu.h>
 #include <smpboot_hooks.h>
 
+/* Override macros from asm/mm.h to make them work with mfn_t */
+#undef mfn_to_page
+#define mfn_to_page(mfn) __mfn_to_page(mfn_x(mfn))
+#undef page_to_mfn
+#define page_to_mfn(pg) _mfn(__page_to_mfn(pg))
+
 #define setup_trampoline()    (bootsym_phys(trampoline_realmode_entry))
 
 unsigned long __read_mostly trampoline_phys;
@@ -307,14 +313,14 @@ void start_secondary(void *unused)
      * Just as during early bootstrap, it is convenient here to disable
      * spinlock checking while we have IRQs disabled. This allows us to
      * acquire IRQ-unsafe locks when it would otherwise be disallowed.
-     * 
+     *
      * It is safe because the race we are usually trying to avoid involves
      * a group of CPUs rendezvousing in an IPI handler, where one cannot
      * join because it is spinning with IRQs disabled waiting to acquire a
      * lock held by another in the rendezvous group (the lock must be an
      * IRQ-unsafe lock since the CPU took the IPI after acquiring it, and
      * hence had IRQs enabled). This is a deadlock scenario.
-     * 
+     *
      * However, no CPU can be involved in rendezvous until it is online,
      * hence no such group can be waiting for this CPU until it is
      * visible in cpu_online_map. Hence such a deadlock is not possible.
@@ -423,8 +429,8 @@ static int wakeup_secondary_cpu(int phys_apicid, unsigned long start_eip)
     else if ( tboot_in_measured_env() )
     {
         /*
-         * With tboot AP is actually spinning in a mini-guest before 
-         * receiving INIT. Upon receiving INIT ipi, AP need time to VMExit, 
+         * With tboot AP is actually spinning in a mini-guest before
+         * receiving INIT. Upon receiving INIT ipi, AP need time to VMExit,
          * update VMCS to tracking SIPIs and VMResume.
          *
          * While AP is in root mode handling the INIT the CPU will drop
@@ -596,7 +602,7 @@ unsigned long alloc_stub_page(unsigned int cpu, unsigned long *mfn)
     BUILD_BUG_ON(STUBS_PER_PAGE & (STUBS_PER_PAGE - 1));
 
     if ( *mfn )
-        pg = mfn_to_page(*mfn);
+        pg = mfn_to_page(_mfn(*mfn));
     else
     {
         nodeid_t node = cpu_to_node(cpu);
@@ -610,7 +616,7 @@ unsigned long alloc_stub_page(unsigned int cpu, unsigned long *mfn)
     }
 
     stub_va = XEN_VIRT_END - (cpu + 1) * PAGE_SIZE;
-    if ( map_pages_to_xen(stub_va, page_to_mfn(pg), 1,
+    if ( map_pages_to_xen(stub_va, mfn_x(page_to_mfn(pg)), 1,
                           PAGE_HYPERVISOR_RX | MAP_SMALL_PAGES) )
     {
         if ( !*mfn )
@@ -618,7 +624,7 @@ unsigned long alloc_stub_page(unsigned int cpu, unsigned long *mfn)
         stub_va = 0;
     }
     else if ( !*mfn )
-        *mfn = page_to_mfn(pg);
+        *mfn = mfn_x(page_to_mfn(pg));
 
     return stub_va;
 }
@@ -652,8 +658,8 @@ static void cpu_smpboot_free(unsigned int cpu)
 
     if ( per_cpu(stubs.addr, cpu) )
     {
-        unsigned long mfn = per_cpu(stubs.mfn, cpu);
-        unsigned char *stub_page = map_domain_page(_mfn(mfn));
+        mfn_t mfn = _mfn(per_cpu(stubs.mfn, cpu));
+        unsigned char *stub_page = map_domain_page(mfn);
         unsigned int i;
 
         memset(stub_page + STUB_BUF_CPU_OFFS(cpu), 0xcc, STUB_BUF_SIZE);
@@ -871,7 +877,7 @@ remove_siblinginfo(int cpu)
         if ( cpumask_weight(per_cpu(cpu_sibling_mask, cpu)) == 1 )
             cpu_data[sibling].booted_cores--;
     }
-   
+
     for_each_cpu(sibling, per_cpu(cpu_sibling_mask, cpu))
         cpumask_clear_cpu(cpu, per_cpu(cpu_sibling_mask, sibling));
     cpumask_clear(per_cpu(cpu_sibling_mask, cpu));
-- 
2.1.4


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

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t
  2017-08-18 10:27 [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t Andrew Cooper
  2017-08-18 10:27 ` [PATCH 2/2] x86/smp: Misc cleanup Andrew Cooper
@ 2017-08-18 11:51 ` Wei Liu
  2017-08-18 12:16 ` Jan Beulich
  2 siblings, 0 replies; 7+ messages in thread
From: Wei Liu @ 2017-08-18 11:51 UTC (permalink / raw)
  To: Andrew Cooper; +Cc: George Dunlap, Tim Deegan, Wei Liu, Jan Beulich, Xen-devel

On Fri, Aug 18, 2017 at 11:27:26AM +0100, Andrew Cooper wrote:
> To avoid breaking the build elsewhere, the l{1..4}e_{from,get}_page() macros
> are switched to using __mfn_to_page() and __page_to_mfn().
> 
> Most changes are wrapping or removing _mfn()/mfn_x() from existing callsites.
> 
> However, {alloc,free}_l1_table() are switched to using __map_domain_page(), as
> their pfn parameters are otherwise unused.  get_page() has one pfn->mfn
> correction in a printk(), and __get_page_type()'s IOMMU handling has its gfn
> calculation broken out for clarity.
> 
> No functional change.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> ---
> CC: Jan Beulich <JBeulich@suse.com>
> CC: Wei Liu <wei.liu2@citrix.com>
> CC: George Dunlap <george.dunlap@eu.citrix.com>
> CC: Tim Deegan <tim@xen.org>
> ---
>  xen/arch/x86/mm.c          | 151 ++++++++++++++++++++++++---------------------
>  xen/include/asm-x86/page.h |  16 ++---
>  2 files changed, 88 insertions(+), 79 deletions(-)
> 
> diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
> index 31fe8a1..e862380 100644
> --- a/xen/arch/x86/mm.c
> +++ b/xen/arch/x86/mm.c
> @@ -123,6 +123,12 @@
>  #include <asm/io_apic.h>
>  #include <asm/pci.h>
>  
> +/* Override macros from asm/mm.h to make them work with mfn_t */

They are from asm/page.h.

Otherwise:

Reviewed-by: Wei Liu <wei.liu2@citrix.com>

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] x86/smp: Misc cleanup
  2017-08-18 10:27 ` [PATCH 2/2] x86/smp: Misc cleanup Andrew Cooper
@ 2017-08-18 11:52   ` Wei Liu
  2017-08-18 12:17   ` Jan Beulich
  1 sibling, 0 replies; 7+ messages in thread
From: Wei Liu @ 2017-08-18 11:52 UTC (permalink / raw)
  To: Andrew Cooper; +Cc: Wei Liu, Jan Beulich, Xen-devel

On Fri, Aug 18, 2017 at 11:27:27AM +0100, Andrew Cooper wrote:
>  * Delete trailing whitespace
>  * Switch to using mfn_t for mfn_to_page()/page_to_mfn()
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
>  
[...]
> +/* Override macros from asm/mm.h to make them work with mfn_t */

Same here.

Otherwise:

Reviewed-by: Wei Liu <wei.liu2@citrix.com>

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t
  2017-08-18 10:27 [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t Andrew Cooper
  2017-08-18 10:27 ` [PATCH 2/2] x86/smp: Misc cleanup Andrew Cooper
  2017-08-18 11:51 ` [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t Wei Liu
@ 2017-08-18 12:16 ` Jan Beulich
  2017-08-18 12:17   ` Andrew Cooper
  2 siblings, 1 reply; 7+ messages in thread
From: Jan Beulich @ 2017-08-18 12:16 UTC (permalink / raw)
  To: Andrew Cooper; +Cc: George Dunlap, Tim Deegan, Wei Liu, Xen-devel

>>> On 18.08.17 at 12:27, <andrew.cooper3@citrix.com> wrote:
> To avoid breaking the build elsewhere, the l{1..4}e_{from,get}_page() macros
> are switched to using __mfn_to_page() and __page_to_mfn().
> 
> Most changes are wrapping or removing _mfn()/mfn_x() from existing callsites.
> 
> However, {alloc,free}_l1_table() are switched to using __map_domain_page(), as
> their pfn parameters are otherwise unused.  get_page() has one pfn->mfn
> correction in a printk(), and __get_page_type()'s IOMMU handling has its gfn
> calculation broken out for clarity.
> 
> No functional change.
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>
with Wei's remark addressed and with one optional further request:

> --- a/xen/include/asm-x86/page.h
> +++ b/xen/include/asm-x86/page.h
> @@ -82,10 +82,10 @@
>      ((paddr_t)(((x).l4 & (PADDR_MASK&PAGE_MASK))))
>  
>  /* Get pointer to info structure of page mapped by pte (struct page_info *). */
> -#define l1e_get_page(x)           (mfn_to_page(l1e_get_pfn(x)))
> -#define l2e_get_page(x)           (mfn_to_page(l2e_get_pfn(x)))
> -#define l3e_get_page(x)           (mfn_to_page(l3e_get_pfn(x)))
> -#define l4e_get_page(x)           (mfn_to_page(l4e_get_pfn(x)))
> +#define l1e_get_page(x)           (__mfn_to_page(l1e_get_pfn(x)))
> +#define l2e_get_page(x)           (__mfn_to_page(l2e_get_pfn(x)))
> +#define l3e_get_page(x)           (__mfn_to_page(l3e_get_pfn(x)))
> +#define l4e_get_page(x)           (__mfn_to_page(l4e_get_pfn(x)))
>  
>  /* Get pte access flags (unsigned int). */
>  #define l1e_get_flags(x)           (get_pte_flags((x).l1))
> @@ -145,10 +145,10 @@ static inline l4_pgentry_t l4e_from_paddr(paddr_t pa, unsigned int flags)
>  #define l4e_from_intpte(intpte)    ((l4_pgentry_t) { (intpte_t)(intpte) })
>  
>  /* Construct a pte from a page pointer and access flags. */
> -#define l1e_from_page(page, flags) (l1e_from_pfn(page_to_mfn(page),(flags)))
> -#define l2e_from_page(page, flags) (l2e_from_pfn(page_to_mfn(page),(flags)))
> -#define l3e_from_page(page, flags) (l3e_from_pfn(page_to_mfn(page),(flags)))
> -#define l4e_from_page(page, flags) (l4e_from_pfn(page_to_mfn(page),(flags)))
> +#define l1e_from_page(page, flags) (l1e_from_pfn(__page_to_mfn(page), (flags)))
> +#define l2e_from_page(page, flags) (l2e_from_pfn(__page_to_mfn(page), (flags)))
> +#define l3e_from_page(page, flags) (l3e_from_pfn(__page_to_mfn(page), (flags)))
> +#define l4e_from_page(page, flags) (l4e_from_pfn(__page_to_mfn(page), (flags)))

Mind at once stripping the pointless outer parentheses from all
the macros you modify, and the ones around flags in the latter
set?

Jan


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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t
  2017-08-18 12:16 ` Jan Beulich
@ 2017-08-18 12:17   ` Andrew Cooper
  0 siblings, 0 replies; 7+ messages in thread
From: Andrew Cooper @ 2017-08-18 12:17 UTC (permalink / raw)
  To: Jan Beulich; +Cc: George Dunlap, Tim Deegan, Wei Liu, Xen-devel

On 18/08/17 13:16, Jan Beulich wrote:
>>>> On 18.08.17 at 12:27, <andrew.cooper3@citrix.com> wrote:
>> To avoid breaking the build elsewhere, the l{1..4}e_{from,get}_page() macros
>> are switched to using __mfn_to_page() and __page_to_mfn().
>>
>> Most changes are wrapping or removing _mfn()/mfn_x() from existing callsites.
>>
>> However, {alloc,free}_l1_table() are switched to using __map_domain_page(), as
>> their pfn parameters are otherwise unused.  get_page() has one pfn->mfn
>> correction in a printk(), and __get_page_type()'s IOMMU handling has its gfn
>> calculation broken out for clarity.
>>
>> No functional change.
>>
>> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> Acked-by: Jan Beulich <jbeulich@suse.com>
> with Wei's remark addressed and with one optional further request:
>
>> --- a/xen/include/asm-x86/page.h
>> +++ b/xen/include/asm-x86/page.h
>> @@ -82,10 +82,10 @@
>>      ((paddr_t)(((x).l4 & (PADDR_MASK&PAGE_MASK))))
>>  
>>  /* Get pointer to info structure of page mapped by pte (struct page_info *). */
>> -#define l1e_get_page(x)           (mfn_to_page(l1e_get_pfn(x)))
>> -#define l2e_get_page(x)           (mfn_to_page(l2e_get_pfn(x)))
>> -#define l3e_get_page(x)           (mfn_to_page(l3e_get_pfn(x)))
>> -#define l4e_get_page(x)           (mfn_to_page(l4e_get_pfn(x)))
>> +#define l1e_get_page(x)           (__mfn_to_page(l1e_get_pfn(x)))
>> +#define l2e_get_page(x)           (__mfn_to_page(l2e_get_pfn(x)))
>> +#define l3e_get_page(x)           (__mfn_to_page(l3e_get_pfn(x)))
>> +#define l4e_get_page(x)           (__mfn_to_page(l4e_get_pfn(x)))
>>  
>>  /* Get pte access flags (unsigned int). */
>>  #define l1e_get_flags(x)           (get_pte_flags((x).l1))
>> @@ -145,10 +145,10 @@ static inline l4_pgentry_t l4e_from_paddr(paddr_t pa, unsigned int flags)
>>  #define l4e_from_intpte(intpte)    ((l4_pgentry_t) { (intpte_t)(intpte) })
>>  
>>  /* Construct a pte from a page pointer and access flags. */
>> -#define l1e_from_page(page, flags) (l1e_from_pfn(page_to_mfn(page),(flags)))
>> -#define l2e_from_page(page, flags) (l2e_from_pfn(page_to_mfn(page),(flags)))
>> -#define l3e_from_page(page, flags) (l3e_from_pfn(page_to_mfn(page),(flags)))
>> -#define l4e_from_page(page, flags) (l4e_from_pfn(page_to_mfn(page),(flags)))
>> +#define l1e_from_page(page, flags) (l1e_from_pfn(__page_to_mfn(page), (flags)))
>> +#define l2e_from_page(page, flags) (l2e_from_pfn(__page_to_mfn(page), (flags)))
>> +#define l3e_from_page(page, flags) (l3e_from_pfn(__page_to_mfn(page), (flags)))
>> +#define l4e_from_page(page, flags) (l4e_from_pfn(__page_to_mfn(page), (flags)))
> Mind at once stripping the pointless outer parentheses from all
> the macros you modify, and the ones around flags in the latter
> set?

Will do.

~Andrew

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] x86/smp: Misc cleanup
  2017-08-18 10:27 ` [PATCH 2/2] x86/smp: Misc cleanup Andrew Cooper
  2017-08-18 11:52   ` Wei Liu
@ 2017-08-18 12:17   ` Jan Beulich
  1 sibling, 0 replies; 7+ messages in thread
From: Jan Beulich @ 2017-08-18 12:17 UTC (permalink / raw)
  To: Andrew Cooper; +Cc: Wei Liu, Xen-devel

 >>> On 18.08.17 at 12:27, <andrew.cooper3@citrix.com> wrote:
> * Delete trailing whitespace
>  * Switch to using mfn_t for mfn_to_page()/page_to_mfn()
> 
> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>

Acked-by: Jan Beulich <jbeulich@suse.com>
again with Wei's remark addressed.

Jan


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

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2017-08-18 12:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-18 10:27 [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t Andrew Cooper
2017-08-18 10:27 ` [PATCH 2/2] x86/smp: Misc cleanup Andrew Cooper
2017-08-18 11:52   ` Wei Liu
2017-08-18 12:17   ` Jan Beulich
2017-08-18 11:51 ` [PATCH 1/2] x86/mm: Override mfn_to_page() and page_to_mfn() to use mfn_t Wei Liu
2017-08-18 12:16 ` Jan Beulich
2017-08-18 12:17   ` Andrew Cooper

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).