Support for Memory paging in grant table mappings.
authorKeir Fraser <keir.fraser@citrix.com>
Thu, 17 Dec 2009 06:27:55 +0000 (06:27 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Thu, 17 Dec 2009 06:27:55 +0000 (06:27 +0000)
Signed-off-by: Patrick Colp <Patrick.Colp@citrix.com>
xen/common/grant_table.c

index cfcae99acabbad7eef90bf356a12205765f7154b..e56cb6f1e744217957bb1e84388156ce00c6a4e7 100644 (file)
@@ -1873,7 +1873,15 @@ __gnttab_copy(
     }
     else
     {
-        s_frame = gmfn_to_mfn(sd, op->source.u.gmfn);
+        p2m_type_t p2mt;
+        s_frame = mfn_x(gfn_to_mfn(sd, op->source.u.gmfn, &p2mt));
+        if ( p2m_is_paging(p2mt) )
+        {
+            p2m_mem_paging_populate(sd, op->source.u.gmfn);
+
+            rc = -ENOENT;
+            goto error_out;
+        }
         source_domain = sd;
     }
     if ( unlikely(!mfn_valid(s_frame)) )
@@ -1906,7 +1914,15 @@ __gnttab_copy(
     }
     else
     {
-        d_frame = gmfn_to_mfn(dd, op->dest.u.gmfn);
+        p2m_type_t p2mt;
+        d_frame = mfn_x(gfn_to_mfn(dd, op->dest.u.gmfn, &p2mt));
+        if ( p2m_is_paging(p2mt) )
+        {
+            p2m_mem_paging_populate(dd, op->dest.u.gmfn);
+
+            rc = -ENOENT;
+            goto error_out;
+        }
         dest_domain = dd;
     }
     if ( unlikely(!mfn_valid(d_frame)) )