[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 2/2] tools/libs/gnttab: decouple more from mini-os
libgnttab is using implementation details of Mini-OS. Change that by letting libgnttab use the new get_file_from_fd() function and the generic dev pointer of struct file from Mini-OS. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> --- tools/libs/gnttab/minios.c | 48 ++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/tools/libs/gnttab/minios.c b/tools/libs/gnttab/minios.c index f78caadd30..64601db085 100644 --- a/tools/libs/gnttab/minios.c +++ b/tools/libs/gnttab/minios.c @@ -28,6 +28,7 @@ #include <sys/mman.h> #include <errno.h> +#include <malloc.h> #include <unistd.h> #include "private.h" @@ -36,10 +37,25 @@ void minios_gnttab_close_fd(int fd); int osdep_gnttab_open(xengnttab_handle *xgt) { - int fd = alloc_fd(FTYPE_GNTMAP); - if ( fd == -1 ) + int fd; + struct file *file; + struct gntmap *gntmap; + + gntmap = malloc(sizeof(*gntmap)); + if ( !gntmap ) return -1; - gntmap_init(&files[fd].gntmap); + + fd = alloc_fd(FTYPE_GNTMAP); + file = get_file_from_fd(fd); + + if ( !file ) + { + free(gntmap); + return -1; + } + + file->dev = gntmap; + gntmap_init(gntmap); xgt->fd = fd; return 0; } @@ -54,8 +70,11 @@ int osdep_gnttab_close(xengnttab_handle *xgt) void minios_gnttab_close_fd(int fd) { - gntmap_fini(&files[fd].gntmap); - files[fd].type = FTYPE_NONE; + struct file *file = get_file_from_fd(fd); + + gntmap_fini(file->dev); + free(file->dev); + file->type = FTYPE_NONE; } void *osdep_gnttab_grant_map(xengnttab_handle *xgt, @@ -64,16 +83,16 @@ void *osdep_gnttab_grant_map(xengnttab_handle *xgt, uint32_t notify_offset, evtchn_port_t notify_port) { - int fd = xgt->fd; + struct file *file = get_file_from_fd(xgt->fd); int stride = 1; + if (flags & XENGNTTAB_GRANT_MAP_SINGLE_DOMAIN) stride = 0; if (notify_offset != -1 || notify_port != -1) { errno = ENOSYS; return NULL; } - return gntmap_map_grant_refs(&files[fd].gntmap, - count, domids, stride, + return gntmap_map_grant_refs(file->dev, count, domids, stride, refs, prot & PROT_WRITE); } @@ -81,11 +100,10 @@ int osdep_gnttab_unmap(xengnttab_handle *xgt, void *start_address, uint32_t count) { - int fd = xgt->fd; + struct file *file = get_file_from_fd(xgt->fd); int ret; - ret = gntmap_munmap(&files[fd].gntmap, - (unsigned long) start_address, - count); + + ret = gntmap_munmap(file->dev, (unsigned long) start_address, count); if (ret < 0) { errno = -ret; return -1; @@ -95,10 +113,10 @@ int osdep_gnttab_unmap(xengnttab_handle *xgt, int osdep_gnttab_set_max_grants(xengnttab_handle *xgt, uint32_t count) { - int fd = xgt->fd; + struct file *file = get_file_from_fd(xgt->fd); int ret; - ret = gntmap_set_max_grants(&files[fd].gntmap, - count); + + ret = gntmap_set_max_grants(file->dev, count); if (ret < 0) { errno = -ret; return -1; -- 2.26.2
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |