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

[Xen-changelog] [xen-unstable] libxc: osdep: convert xc_gnttab_map_{grant_ref, grant_refs, domain_grant_refs}()



# HG changeset patch
# User Ian Campbell <ian.campbell@xxxxxxxxxx>
# Date 1291369007 0
# Node ID cdfdc88320f04f630f7fd2e03ee00547ef773855
# Parent  eb2c27908b3d0ecc4963fd49921cab40a02b5c98
libxc: osdep: convert xc_gnttab_map_{grant_ref,grant_refs,domain_grant_refs}()

Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Signed-off-by: Ian Jackson <ian.jackson.citrix.com>
---
 tools/libxc/xc_gnttab.c    |   38 ++++++++++++++++++++++++++++++++++
 tools/libxc/xc_linux.c     |   50 +++++++++++++++++++++++++++------------------
 tools/libxc/xc_minios.c    |   49 ++++++++++++++++++++++++++------------------
 tools/libxc/xenctrlosdep.h |   16 ++++++++++++++
 4 files changed, 114 insertions(+), 39 deletions(-)

diff -r eb2c27908b3d -r cdfdc88320f0 tools/libxc/xc_gnttab.c
--- a/tools/libxc/xc_gnttab.c   Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_gnttab.c   Fri Dec 03 09:36:47 2010 +0000
@@ -145,3 +145,41 @@ grant_entry_v2_t *xc_gnttab_map_table_v2
     return _gnttab_map_table(xch, domid, gnt_num);
 }
 
+void *xc_gnttab_map_grant_ref(xc_gnttab *xcg,
+                              uint32_t domid,
+                              uint32_t ref,
+                              int prot)
+{
+       return xcg->ops->u.gnttab.map_grant_ref(xcg, xcg->ops_handle,
+                                               domid, ref, prot);
+}
+
+void *xc_gnttab_map_grant_refs(xc_gnttab *xcg,
+                               uint32_t count,
+                               uint32_t *domids,
+                               uint32_t *refs,
+                               int prot)
+{
+       return xcg->ops->u.gnttab.map_grant_refs(xcg, xcg->ops_handle,
+                                                count, domids, refs, prot);
+}
+
+void *xc_gnttab_map_domain_grant_refs(xc_gnttab *xcg,
+                                      uint32_t count,
+                                      uint32_t domid,
+                                      uint32_t *refs,
+                                      int prot)
+{
+       return xcg->ops->u.gnttab.map_domain_grant_refs(xcg, xcg->ops_handle,
+                                                       count, domid, refs, 
prot);
+}
+
+/*
+ * Local variables:
+ * mode: C
+ * c-set-style: "BSD"
+ * c-basic-offset: 4
+ * tab-width: 4
+ * indent-tabs-mode: nil
+ * End:
+ */
diff -r eb2c27908b3d -r cdfdc88320f0 tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c    Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_linux.c    Fri Dec 03 09:36:47 2010 +0000
@@ -508,8 +508,10 @@ static int linux_gnttab_close(xc_gnttab 
     return close(fd);
 }
 
-void *xc_gnttab_map_grant_ref(xc_gnttab *xch, uint32_t domid, uint32_t ref, 
int prot)
-{
+static void *linux_gnttab_map_grant_ref(xc_gnttab *xch, xc_osdep_handle h,
+                                        uint32_t domid, uint32_t ref, int prot)
+{
+    int fd = (int)h;
     struct ioctl_gntdev_map_grant_ref map;
     void *addr;
 
@@ -517,13 +519,13 @@ void *xc_gnttab_map_grant_ref(xc_gnttab 
     map.refs[0].domid = domid;
     map.refs[0].ref = ref;
 
-    if ( ioctl(xch->fd, IOCTL_GNTDEV_MAP_GRANT_REF, &map) ) {
+    if ( ioctl(fd, IOCTL_GNTDEV_MAP_GRANT_REF, &map) ) {
         PERROR("xc_gnttab_map_grant_ref: ioctl MAP_GRANT_REF failed");
         return NULL;
     }
 
 mmap_again:    
-    addr = mmap(NULL, PAGE_SIZE, prot, MAP_SHARED, xch->fd, map.index);
+    addr = mmap(NULL, PAGE_SIZE, prot, MAP_SHARED, fd, map.index);
     if ( addr == MAP_FAILED )
     {
         int saved_errno = errno;
@@ -538,7 +540,7 @@ mmap_again:
         PERROR("xc_gnttab_map_grant_ref: mmap failed");
         unmap_grant.index = map.index;
         unmap_grant.count = 1;
-        ioctl(xch->fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
+        ioctl(fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
         errno = saved_errno;
         return NULL;
     }
@@ -546,10 +548,12 @@ mmap_again:
     return addr;
 }
 
-static void *do_gnttab_map_grant_refs(xc_gnttab *xch, uint32_t count,
+static void *do_gnttab_map_grant_refs(xc_gnttab *xch, xc_osdep_handle h,
+                                      uint32_t count,
                                       uint32_t *domids, int domids_stride,
                                       uint32_t *refs, int prot)
 {
+    int fd = (int)h;
     struct ioctl_gntdev_map_grant_ref *map;
     void *addr = NULL;
     int i;
@@ -567,12 +571,12 @@ static void *do_gnttab_map_grant_refs(xc
 
     map->count = count;
 
-    if ( ioctl(xch->fd, IOCTL_GNTDEV_MAP_GRANT_REF, map) ) {
+    if ( ioctl(fd, IOCTL_GNTDEV_MAP_GRANT_REF, map) ) {
         PERROR("xc_gnttab_map_grant_refs: ioctl MAP_GRANT_REF failed");
         goto out;
     }
 
-    addr = mmap(NULL, PAGE_SIZE * count, prot, MAP_SHARED, xch->fd,
+    addr = mmap(NULL, PAGE_SIZE * count, prot, MAP_SHARED, fd,
                 map->index);
     if ( addr == MAP_FAILED )
     {
@@ -583,7 +587,7 @@ static void *do_gnttab_map_grant_refs(xc
         PERROR("xc_gnttab_map_grant_refs: mmap failed");
         unmap_grant.index = map->index;
         unmap_grant.count = count;
-        ioctl(xch->fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
+        ioctl(fd, IOCTL_GNTDEV_UNMAP_GRANT_REF, &unmap_grant);
         errno = saved_errno;
         addr = NULL;
     }
@@ -594,16 +598,18 @@ static void *do_gnttab_map_grant_refs(xc
     return addr;
 }
 
-void *xc_gnttab_map_grant_refs(xc_gnttab *xcg, uint32_t count, uint32_t 
*domids,
-                               uint32_t *refs, int prot)
-{
-    return do_gnttab_map_grant_refs(xcg, count, domids, 1, refs, prot);
-}
-
-void *xc_gnttab_map_domain_grant_refs(xc_gnttab *xcg, uint32_t count,
-                                      uint32_t domid, uint32_t *refs, int prot)
-{
-    return do_gnttab_map_grant_refs(xcg, count, &domid, 0, refs, prot);
+static void *linux_gnttab_map_grant_refs(xc_gnttab *xcg, xc_osdep_handle h,
+                                         uint32_t count, uint32_t *domids,
+                                         uint32_t *refs, int prot)
+{
+    return do_gnttab_map_grant_refs(xcg, h, count, domids, 1, refs, prot);
+}
+
+static void *linux_gnttab_map_domain_grant_refs(xc_gnttab *xcg, 
xc_osdep_handle h,
+                                                uint32_t count,
+                                                uint32_t domid, uint32_t 
*refs, int prot)
+{
+    return do_gnttab_map_grant_refs(xcg, h, count, &domid, 0, refs, prot);
 }
 
 int xc_gnttab_munmap(xc_gnttab *xcg, void *start_address, uint32_t count)
@@ -660,6 +666,12 @@ static struct xc_osdep_ops linux_gnttab_
 static struct xc_osdep_ops linux_gnttab_ops = {
     .open = &linux_gnttab_open,
     .close = &linux_gnttab_close,
+
+    .u.gnttab = {
+        .map_grant_ref = &linux_gnttab_map_grant_ref,
+        .map_grant_refs = &linux_gnttab_map_grant_refs,
+        .map_domain_grant_refs = &linux_gnttab_map_domain_grant_refs,
+    },
 };
 
 static struct xc_osdep_ops *linux_osdep_init(xc_interface *xch, enum 
xc_osdep_type type)
diff -r eb2c27908b3d -r cdfdc88320f0 tools/libxc/xc_minios.c
--- a/tools/libxc/xc_minios.c   Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xc_minios.c   Fri Dec 03 09:36:47 2010 +0000
@@ -447,38 +447,41 @@ void minios_gnttab_close_fd(int fd)
     files[fd].type = FTYPE_NONE;
 }
 
-void *xc_gnttab_map_grant_ref(xc_gnttab *xcg,
-                              uint32_t domid,
-                              uint32_t ref,
-                              int prot)
-{
-    return gntmap_map_grant_refs(&files[xcg->fd].gntmap,
+static void *minios_gnttab_map_grant_ref(xc_gnttab *xcg, xc_osdep_handle h,
+                                         uint32_t domid,
+                                         uint32_t ref,
+                                         int prot)
+{
+    int fd = (int)h;
+    return gntmap_map_grant_refs(&files[fd].gntmap,
                                  1,
                                  &domid, 0,
                                  &ref,
                                  prot & PROT_WRITE);
 }
 
-void *xc_gnttab_map_grant_refs(xc_gnttab *xcg,
-                               uint32_t count,
-                               uint32_t *domids,
-                               uint32_t *refs,
-                               int prot)
-{
-    return gntmap_map_grant_refs(&files[xcg->fd].gntmap,
+static void *minios_gnttab_map_grant_refs(xc_gnttab *xcg, xc_osdep_handle h,
+                                          uint32_t count,
+                                          uint32_t *domids,
+                                          uint32_t *refs,
+                                          int prot)
+{
+    int fd = (int)h;
+    return gntmap_map_grant_refs(&files[fd].gntmap,
                                  count,
                                  domids, 1,
                                  refs,
                                  prot & PROT_WRITE);
 }
 
-void *xc_gnttab_map_domain_grant_refs(xc_gnttab *xcg,
-                                      uint32_t count,
-                                      uint32_t domid,
-                                      uint32_t *refs,
-                                      int prot)
-{
-    return gntmap_map_grant_refs(&files[xcg->fd].gntmap,
+static void *minios_gnttab_map_domain_grant_refs(xc_gnttab *xcg, 
xc_osdep_handle h,
+                                                 uint32_t count,
+                                                 uint32_t domid,
+                                                 uint32_t *refs,
+                                                 int prot)
+{
+    int fd = (int)h;
+    return gntmap_map_grant_refs(&files[fd].gntmap,
                                  count,
                                  &domid, 0,
                                  refs,
@@ -516,6 +519,12 @@ static struct xc_osdep_ops minios_gnttab
 static struct xc_osdep_ops minios_gnttab_ops = {
     .open = &minios_gnttab_open,
     .close = &minios_gnttab_close,
+
+    .u.gnttab = {
+        .map_grant_ref = &minios_gnttab_map_grant_ref,
+        .map_grant_refs = &minios_gnttab_map_grant_refs,
+        .map_domain_grant_refs = &minios_gnttab_map_domain_grant_refs,
+    },
 };
 
 static struct xc_osdep_ops *minios_osdep_init(xc_interface *xch, enum 
xc_osdep_type type)
diff -r eb2c27908b3d -r cdfdc88320f0 tools/libxc/xenctrlosdep.h
--- a/tools/libxc/xenctrlosdep.h        Fri Dec 03 09:36:47 2010 +0000
+++ b/tools/libxc/xenctrlosdep.h        Fri Dec 03 09:36:47 2010 +0000
@@ -89,6 +89,22 @@ struct xc_osdep_ops
             evtchn_port_or_error_t (*pending)(xc_evtchn *xce, xc_osdep_handle 
h);
             int (*unmask)(xc_evtchn *xce, xc_osdep_handle h, evtchn_port_t 
port);
         } evtchn;
+        struct {
+            void *(*map_grant_ref)(xc_gnttab *xcg, xc_osdep_handle h,
+                                   uint32_t domid,
+                                   uint32_t ref,
+                                   int prot);
+            void *(*map_grant_refs)(xc_gnttab *xcg, xc_osdep_handle h,
+                                    uint32_t count,
+                                    uint32_t *domids,
+                                    uint32_t *refs,
+                                    int prot);
+            void *(*map_domain_grant_refs)(xc_gnttab *xcg, xc_osdep_handle h,
+                                           uint32_t count,
+                                           uint32_t domid,
+                                           uint32_t *refs,
+                                           int prot);
+        } gnttab;
     } u;
 };
 typedef struct xc_osdep_ops xc_osdep_ops;

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