aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/xen/grant-table.c
diff options
context:
space:
mode:
authorDaniel De Graaf <dgdegra@tycho.nsa.gov>2011-02-03 12:19:02 -0500
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2011-02-14 14:15:55 -0500
commitaab8f11a6b4641fcb8c139420f2eae879b5d1698 (patch)
tree11142851a24c5c26e83199980926558788335c49 /drivers/xen/grant-table.c
parent68b025c813c2eb41ff25628e3d4952d5185eb1a4 (diff)
xen-gntdev: Support mapping in HVM domains
HVM does not allow direct PTE modification, so instead we request that Xen change its internal p2m mappings on the allocated pages and map the memory into userspace normally. Note: The HVM path for map and unmap is slightly different: HVM keeps the pages mapped until the area is deleted, while the PV case (use_ptemod being true) must unmap them when userspace unmaps the range. In the normal use case, this makes no difference to users since unmap time is deletion time. [v2: Expanded commit descr.] Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'drivers/xen/grant-table.c')
-rw-r--r--drivers/xen/grant-table.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/xen/grant-table.c b/drivers/xen/grant-table.c
index 9ef54ebc1194..9428ced04807 100644
--- a/drivers/xen/grant-table.c
+++ b/drivers/xen/grant-table.c
@@ -458,6 +458,9 @@ int gnttab_map_refs(struct gnttab_map_grant_ref *map_ops,
458 if (ret) 458 if (ret)
459 return ret; 459 return ret;
460 460
461 if (xen_feature(XENFEAT_auto_translated_physmap))
462 return ret;
463
461 for (i = 0; i < count; i++) { 464 for (i = 0; i < count; i++) {
462 /* m2p override only supported for GNTMAP_contains_pte mappings */ 465 /* m2p override only supported for GNTMAP_contains_pte mappings */
463 if (!(map_ops[i].flags & GNTMAP_contains_pte)) 466 if (!(map_ops[i].flags & GNTMAP_contains_pte))
@@ -483,6 +486,9 @@ int gnttab_unmap_refs(struct gnttab_unmap_grant_ref *unmap_ops,
483 if (ret) 486 if (ret)
484 return ret; 487 return ret;
485 488
489 if (xen_feature(XENFEAT_auto_translated_physmap))
490 return ret;
491
486 for (i = 0; i < count; i++) { 492 for (i = 0; i < count; i++) {
487 ret = m2p_remove_override(pages[i]); 493 ret = m2p_remove_override(pages[i]);
488 if (ret) 494 if (ret)