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

[Xen-devel] [PATCH v3 08/21] x86/mm: export get_page_from_pagenr



It will be used by different files later, so export it via
asm-x86/mm.h.

Make it return 0 on success and -EINVAL on failure to match other
get_page_from functions. Fix all call sites.

Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
---
 xen/arch/x86/mm.c        | 26 +++++++++++++-------------
 xen/include/asm-x86/mm.h |  1 +
 2 files changed, 14 insertions(+), 13 deletions(-)

diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c
index d264f76684..472f0d40d5 100644
--- a/xen/arch/x86/mm.c
+++ b/xen/arch/x86/mm.c
@@ -689,7 +689,7 @@ int map_ldt_shadow_page(unsigned int off)
 }
 
 
-static int get_page_from_pagenr(unsigned long page_nr, struct domain *d)
+int get_page_from_pagenr(unsigned long page_nr, struct domain *d)
 {
     struct page_info *page = mfn_to_page(page_nr);
 
@@ -697,10 +697,10 @@ static int get_page_from_pagenr(unsigned long page_nr, 
struct domain *d)
     {
         gdprintk(XENLOG_WARNING,
                  "Could not get page ref for mfn %"PRI_mfn"\n", page_nr);
-        return 0;
+        return -EINVAL;
     }
 
-    return 1;
+    return 0;
 }
 
 
@@ -714,7 +714,7 @@ static int get_page_and_type_from_pagenr(unsigned long 
page_nr,
     int rc;
 
     if ( likely(partial >= 0) &&
-         unlikely(!get_page_from_pagenr(page_nr, d)) )
+         unlikely(get_page_from_pagenr(page_nr, d)) )
         return -EINVAL;
 
     rc = (preemptible ?
@@ -768,7 +768,7 @@ get_##level##_linear_pagetable(                             
                \
     if ( (pfn = level##e_get_pfn(pde)) != pde_pfn )                         \
     {                                                                       \
         /* Make sure the mapped frame belongs to the correct domain. */     \
-        if ( unlikely(!get_page_from_pagenr(pfn, d)) )                      \
+        if ( unlikely(get_page_from_pagenr(pfn, d)) )                       \
             return 0;                                                       \
                                                                             \
         /*                                                                  \
@@ -2998,7 +2998,7 @@ int new_guest_cr3(unsigned long mfn)
     }
 
     rc = paging_mode_refcounts(d)
-         ? (get_page_from_pagenr(mfn, d) ? 0 : -EINVAL)
+         ? (!get_page_from_pagenr(mfn, d) ? 0 : -EINVAL)
          : get_page_and_type_from_pagenr(mfn, PGT_root_page_table, d, 0, 1);
     switch ( rc )
     {
@@ -3921,7 +3921,7 @@ long do_mmu_update(
                 xsm_checked = xsm_needed;
             }
 
-            if ( unlikely(!get_page_from_pagenr(mfn, pg_owner)) )
+            if ( unlikely(get_page_from_pagenr(mfn, pg_owner)) )
             {
                 gdprintk(XENLOG_WARNING,
                          "Could not get page for mach->phys update\n");
@@ -4135,7 +4135,7 @@ static int create_grant_va_mapping(
         return GNTST_general_error;
     }
 
-    if ( !get_page_from_pagenr(gl1mfn, current->domain) )
+    if ( get_page_from_pagenr(gl1mfn, current->domain) )
     {
         guest_unmap_l1e(pl1e);
         return GNTST_general_error;
@@ -4185,7 +4185,7 @@ static int replace_grant_va_mapping(
         return GNTST_general_error;
     }
 
-    if ( !get_page_from_pagenr(gl1mfn, current->domain) )
+    if ( get_page_from_pagenr(gl1mfn, current->domain) )
     {
         rc = GNTST_general_error;
         goto out;
@@ -4295,7 +4295,7 @@ int replace_grant_pv_mapping(uint64_t addr, unsigned long 
frame,
         return GNTST_general_error;
     }
 
-    if ( !get_page_from_pagenr(gl1mfn, current->domain) )
+    if ( get_page_from_pagenr(gl1mfn, current->domain) )
     {
         guest_unmap_l1e(pl1e);
         return GNTST_general_error;
@@ -4466,7 +4466,7 @@ static int __do_update_va_mapping(
 
     rc = -EINVAL;
     pl1e = guest_map_l1e(va, &gl1mfn);
-    if ( unlikely(!pl1e || !get_page_from_pagenr(gl1mfn, d)) )
+    if ( unlikely(!pl1e || get_page_from_pagenr(gl1mfn, d)) )
         goto out;
 
     gl1pg = mfn_to_page(gl1mfn);
@@ -4838,7 +4838,7 @@ int xenmem_add_to_physmap_one(
                 put_gfn(d, gfn);
                 return -ENOMEM;
             }
-            if ( !get_page_from_pagenr(idx, d) )
+            if ( get_page_from_pagenr(idx, d) )
                 break;
             mfn = idx;
             page = mfn_to_page(mfn);
@@ -5371,7 +5371,7 @@ int ptwr_do_page_fault(struct vcpu *v, unsigned long addr,
     /* We are looking only for read-only mappings of p.t. pages. */
     if ( ((l1e_get_flags(pte) & (_PAGE_PRESENT|_PAGE_RW)) != _PAGE_PRESENT) ||
          rangeset_contains_singleton(mmio_ro_ranges, l1e_get_pfn(pte)) ||
-         !get_page_from_pagenr(l1e_get_pfn(pte), d) )
+         get_page_from_pagenr(l1e_get_pfn(pte), d) )
         goto bail;
 
     page = l1e_get_page(pte);
diff --git a/xen/include/asm-x86/mm.h b/xen/include/asm-x86/mm.h
index 2550e35f85..6fc1e7d5ca 100644
--- a/xen/include/asm-x86/mm.h
+++ b/xen/include/asm-x86/mm.h
@@ -363,6 +363,7 @@ int  put_old_guest_table(struct vcpu *);
 int  get_page_from_l1e(
     l1_pgentry_t l1e, struct domain *l1e_owner, struct domain *pg_owner);
 void put_page_from_l1e(l1_pgentry_t l1e, struct domain *l1e_owner);
+int get_page_from_pagenr(unsigned long page_nr, struct domain *d);
 
 static inline void put_page_and_type(struct page_info *page)
 {
-- 
2.11.0


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

 


Rackspace

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