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

[Xen-devel] [PATCH 07 of 11] common: Use get_page_from_gfn() instead of get_gfn()/put_gfn



# HG changeset patch
# User Tim Deegan <tim@xxxxxxx>
# Date 1336661656 -3600
# Node ID 28d15a29ab59d29a1fd5deb79ceda5d557343f14
# Parent  d19b3ba026fd844d21a250f768f70a1543d6bbd7
common: Use get_page_from_gfn() instead of get_gfn()/put_gfn.

Signed-off-by: Tim Deegan <tim@xxxxxxx>
Signed-off-by: Andres Lagar-Cavilla <andres@xxxxxxxxxxxxxxxx>

diff -r d19b3ba026fd -r 28d15a29ab59 xen/common/memory.c
--- a/xen/common/memory.c       Thu May 10 15:54:16 2012 +0100
+++ b/xen/common/memory.c       Thu May 10 15:54:16 2012 +0100
@@ -676,7 +676,7 @@ long do_memory_op(unsigned long cmd, XEN
     case XENMEM_remove_from_physmap:
     {
         struct xen_remove_from_physmap xrfp;
-        unsigned long mfn;
+        struct page_info *page;
         struct domain *d;
 
         if ( copy_from_guest(&xrfp, arg, 1) )
@@ -694,15 +694,15 @@ long do_memory_op(unsigned long cmd, XEN
 
         domain_lock(d);
 
-        mfn = get_gfn_untyped(d, xrfp.gpfn);
-
-        if ( mfn_valid(mfn) )
-            guest_physmap_remove_page(d, xrfp.gpfn, mfn, 0);
+        page = get_page_from_gfn(d, xrfp.gpfn, NULL, P2M_ALLOC);
+        if ( page )
+        {
+            guest_physmap_remove_page(d, xrfp.gpfn, page_to_mfn(page), 0);
+            put_page(page);
+        }
         else
             rc = -ENOENT;
 
-        put_gfn(d, xrfp.gpfn);
-
         domain_unlock(d);
 
         rcu_unlock_domain(d);
diff -r d19b3ba026fd -r 28d15a29ab59 xen/common/tmem_xen.c
--- a/xen/common/tmem_xen.c     Thu May 10 15:54:16 2012 +0100
+++ b/xen/common/tmem_xen.c     Thu May 10 15:54:16 2012 +0100
@@ -107,30 +107,25 @@ static inline void cli_put_page(tmem_cli
 static inline void *cli_get_page(tmem_cli_mfn_t cmfn, unsigned long *pcli_mfn,
                                  pfp_t **pcli_pfp, bool_t cli_write)
 {
-    unsigned long cli_mfn;
     p2m_type_t t;
     struct page_info *page;
-    int ret;
 
-    cli_mfn = mfn_x(get_gfn(current->domain, cmfn, &t));
-    if ( t != p2m_ram_rw || !mfn_valid(cli_mfn) )
+    page = get_page_from_gfn(current->domain, cmfn, &t, P2M_ALLOC);
+    if ( !page || t != p2m_ram_rw )
     {
-            put_gfn(current->domain, (unsigned long) cmfn);
-            return NULL;
+        if ( page )
+            put_page(page);
     }
-    page = mfn_to_page(cli_mfn);
-    if ( cli_write )
-        ret = get_page_and_type(page, current->domain, PGT_writable_page);
-    else
-        ret = get_page(page, current->domain);
-    if ( !ret )
+
+    if ( cli_write && !get_page_type(page, PGT_writable_page) )
     {
-        put_gfn(current->domain, (unsigned long) cmfn);
+        put_page(page);
         return NULL;
     }
-    *pcli_mfn = cli_mfn;
+
+    *pcli_mfn = page_to_mfn(page);
     *pcli_pfp = (pfp_t *)page;
-    return map_domain_page(cli_mfn);
+    return map_domain_page(*pcli_mfn);
 }
 
 static inline void cli_put_page(tmem_cli_mfn_t cmfn, void *cli_va, pfp_t 
*cli_pfp,
@@ -144,7 +139,6 @@ static inline void cli_put_page(tmem_cli
     else
         put_page((struct page_info *)cli_pfp);
     unmap_domain_page(cli_va);
-    put_gfn(current->domain, (unsigned long) cmfn);
 }
 #endif
 
diff -r d19b3ba026fd -r 28d15a29ab59 xen/xsm/flask/hooks.c
--- a/xen/xsm/flask/hooks.c     Thu May 10 15:54:16 2012 +0100
+++ b/xen/xsm/flask/hooks.c     Thu May 10 15:54:16 2012 +0100
@@ -1318,6 +1318,7 @@ static int flask_mmu_normal_update(struc
     struct domain_security_struct *dsec;
     u32 fsid;
     struct avc_audit_data ad;
+    struct page_info *page = NULL;
 
     if (d != t)
         rc = domain_has_perm(d, t, SECCLASS_MMU, MMU__REMOTE_REMAP);
@@ -1333,8 +1334,9 @@ static int flask_mmu_normal_update(struc
         map_perms |= MMU__MAP_WRITE;
 
     AVC_AUDIT_DATA_INIT(&ad, MEMORY);
-    fmfn = get_gfn_untyped(f, l1e_get_pfn(l1e_from_intpte(fpte)));
-
+    page = get_page_from_gfn(f, l1e_get_pfn(l1e_from_intpte(fpte)),
+                             NULL, P2M_ALLOC);
+    fmfn = page ? page_to_mfn(page) : INVALID_MFN;
     ad.sdom = d;
     ad.tdom = f;
     ad.memory.pte = fpte;
@@ -1342,7 +1344,8 @@ static int flask_mmu_normal_update(struc
 
     rc = get_mfn_sid(fmfn, &fsid);
 
-    put_gfn(f, fmfn);
+    if ( page )
+        put_page(page);
 
     if ( rc )
         return rc;
@@ -1370,7 +1373,7 @@ static int flask_update_va_mapping(struc
     int rc = 0;
     u32 psid;
     u32 map_perms = MMU__MAP_READ;
-    unsigned long mfn;
+    struct page_info *page = NULL;
     struct domain_security_struct *dsec;
 
     if ( !(l1e_get_flags(pte) & _PAGE_PRESENT) )
@@ -1381,8 +1384,10 @@ static int flask_update_va_mapping(struc
 
     dsec = d->ssid;
 
-    mfn = get_gfn_untyped(f, l1e_get_pfn(pte));
-    rc = get_mfn_sid(mfn, &psid);
+    page = get_page_from_gfn(f, l1e_get_pfn(pte), NULL, P2M_ALLOC);
+    rc = get_mfn_sid(page ? page_to_mfn(page) : INVALID_MFN, &psid);
+    if ( page )
+        put_page(page);
     if ( rc )
         return rc;
 

_______________________________________________
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®.