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

[Xen-changelog] [xen-unstable] libxc: add xc_gnttab_map_domain_grant_refs.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1216645373 -3600
# Node ID c049e70af85fbe2006ae5447420fefe8e52ab397
# Parent  85a83b919653378db803882286fa156079c7cd69
libxc: add xc_gnttab_map_domain_grant_refs.

xc_gnttab_map_domain_grant_refs permits to simply map several pages
from the same domain.

Signed-off-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxxx>
---
 tools/libxc/xc_linux.c |   23 +++++++++++++++++++++--
 tools/libxc/xenctrl.h  |   17 +++++++++++++++++
 2 files changed, 38 insertions(+), 2 deletions(-)

diff -r 85a83b919653 -r c049e70af85f tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c    Mon Jul 21 10:39:15 2008 +0100
+++ b/tools/libxc/xc_linux.c    Mon Jul 21 14:02:53 2008 +0100
@@ -418,9 +418,10 @@ void *xc_gnttab_map_grant_ref(int xcg_ha
     return addr;
 }
 
-void *xc_gnttab_map_grant_refs(int xcg_handle,
+static void *do_gnttab_map_grant_refs(int xcg_handle,
                                uint32_t count,
                                uint32_t *domids,
+                               int domids_stride,
                                uint32_t *refs,
                                int prot)
 {
@@ -435,7 +436,7 @@ void *xc_gnttab_map_grant_refs(int xcg_h
 
     for ( i = 0; i < count; i++ )
     {
-        map->refs[i].domid = domids[i];
+        map->refs[i].domid = domids[i * domids_stride];
         map->refs[i].ref   = refs[i];
     }
 
@@ -464,6 +465,24 @@ void *xc_gnttab_map_grant_refs(int xcg_h
     return addr;
 }
 
+void *xc_gnttab_map_grant_refs(int xcg_handle,
+                               uint32_t count,
+                               uint32_t *domids,
+                               uint32_t *refs,
+                               int prot)
+{
+    return do_gnttab_map_grant_refs(xcg_handle, count, domids, 1, refs, prot);
+}
+
+void *xc_gnttab_map_domain_grant_refs(int xcg_handle,
+                               uint32_t count,
+                               uint32_t domid,
+                               uint32_t *refs,
+                               int prot)
+{
+    return do_gnttab_map_grant_refs(xcg_handle, count, &domid, 0, refs, prot);
+}
+
 int xc_gnttab_munmap(int xcg_handle,
                      void *start_address,
                      uint32_t count)
diff -r 85a83b919653 -r c049e70af85f tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Mon Jul 21 10:39:15 2008 +0100
+++ b/tools/libxc/xenctrl.h     Mon Jul 21 14:02:53 2008 +0100
@@ -865,6 +865,23 @@ void *xc_gnttab_map_grant_refs(int xcg_h
                                uint32_t *refs,
                                int prot);
 
+/**
+ * Memory maps one or more grant references from one domain to a
+ * contiguous local address range. Mappings should be unmapped with
+ * xc_gnttab_munmap.  Returns NULL on failure.
+ *
+ * @parm xcg_handle a handle on an open grant table interface
+ * @parm count the number of grant references to be mapped
+ * @parm domid the domain to map memory from
+ * @parm refs an array of @count grant references to be mapped
+ * @parm prot same flag as in mmap()
+ */
+void *xc_gnttab_map_domain_grant_refs(int xcg_handle,
+                                      uint32_t count,
+                                      uint32_t domid,
+                                      uint32_t *refs,
+                                      int prot);
+
 /*
  * Unmaps the @count pages starting at @start_address, which were mapped by a
  * call to xc_gnttab_map_grant_ref or xc_gnttab_map_grant_refs. Returns zero

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

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