[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 24 of 25] libxc: move foreign memory functions to xc_foreign_memory.c
# HG changeset patch # User Ian Campbell <ian.campbell@xxxxxxxxxx> # Date 1291369007 0 # Node ID 4ffab774457dc03d8956113799076cb173522811 # Parent a4d3be2e38ea883d3d2404078adc94960692d022 libxc: move foreign memory functions to xc_foreign_memory.c Now that this file exists it is a better home for these than xc_misc.c Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx> diff -r a4d3be2e38ea -r 4ffab774457d tools/libxc/xc_foreign_memory.c --- a/tools/libxc/xc_foreign_memory.c Fri Dec 03 09:36:47 2010 +0000 +++ b/tools/libxc/xc_foreign_memory.c Fri Dec 03 09:36:47 2010 +0000 @@ -19,6 +19,37 @@ */ #include "xc_private.h" + +void *xc_map_foreign_pages(xc_interface *xch, uint32_t dom, int prot, + const xen_pfn_t *arr, int num) +{ + void *res; + int i, *err; + + if (num < 0) { + errno = -EINVAL; + return NULL; + } + + err = malloc(num * sizeof(*err)); + if (!err) + return NULL; + + res = xc_map_foreign_bulk(xch, dom, prot, arr, err, num); + if (res) { + for (i = 0; i < num; i++) { + if (err[i]) { + errno = -err[i]; + munmap(res, num * PAGE_SIZE); + res = NULL; + break; + } + } + } + + free(err); + return res; +} void *xc_map_foreign_range(xc_interface *xch, uint32_t dom, int size, int prot, unsigned long mfn) @@ -49,6 +80,47 @@ void *xc_map_foreign_bulk(xc_interface * dom, prot, arr, err, num); } +/* stub for all not yet converted OSes */ +void *xc_map_foreign_bulk_compat(xc_interface *xch, xc_osdep_handle h, + uint32_t dom, int prot, + const xen_pfn_t *arr, int *err, unsigned int num) +{ + xen_pfn_t *pfn; + unsigned int i; + void *ret; + + if ((int)num <= 0) { + errno = EINVAL; + return NULL; + } + + pfn = malloc(num * sizeof(*pfn)); + if (!pfn) { + errno = ENOMEM; + return NULL; + } + + memcpy(pfn, arr, num * sizeof(*arr)); + ret = xc_map_foreign_batch(xch, dom, prot, pfn, num); + + if (ret) { + for (i = 0; i < num; ++i) + switch (pfn[i] ^ arr[i]) { + case 0: + err[i] = 0; + break; + default: + err[i] = -EINVAL; + break; + } + } else + memset(err, 0, num * sizeof(*err)); + + free(pfn); + + return ret; +} + /* * Local variables: * mode: C diff -r a4d3be2e38ea -r 4ffab774457d tools/libxc/xc_misc.c --- a/tools/libxc/xc_misc.c Fri Dec 03 09:36:47 2010 +0000 +++ b/tools/libxc/xc_misc.c Fri Dec 03 09:36:47 2010 +0000 @@ -512,78 +512,6 @@ int xc_hvm_set_mem_type( } -/* stub for all not yet converted OSes */ -void *xc_map_foreign_bulk_compat(xc_interface *xch, xc_osdep_handle h, - uint32_t dom, int prot, - const xen_pfn_t *arr, int *err, unsigned int num) -{ - xen_pfn_t *pfn; - unsigned int i; - void *ret; - - if ((int)num <= 0) { - errno = EINVAL; - return NULL; - } - - pfn = malloc(num * sizeof(*pfn)); - if (!pfn) { - errno = ENOMEM; - return NULL; - } - - memcpy(pfn, arr, num * sizeof(*arr)); - ret = xc_map_foreign_batch(xch, dom, prot, pfn, num); - - if (ret) { - for (i = 0; i < num; ++i) - switch (pfn[i] ^ arr[i]) { - case 0: - err[i] = 0; - break; - default: - err[i] = -EINVAL; - break; - } - } else - memset(err, 0, num * sizeof(*err)); - - free(pfn); - - return ret; -} - -void *xc_map_foreign_pages(xc_interface *xch, uint32_t dom, int prot, - const xen_pfn_t *arr, int num) -{ - void *res; - int i, *err; - - if (num < 0) { - errno = -EINVAL; - return NULL; - } - - err = malloc(num * sizeof(*err)); - if (!err) - return NULL; - - res = xc_map_foreign_bulk(xch, dom, prot, arr, err, num); - if (res) { - for (i = 0; i < num; i++) { - if (err[i]) { - errno = -err[i]; - munmap(res, num * PAGE_SIZE); - res = NULL; - break; - } - } - } - - free(err); - return res; -} - /* * Local variables: * mode: C _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |