[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |