From: Ian Campbell Date: Mon, 30 Nov 2015 10:32:28 +0000 (+0000) Subject: tools/libs/foreignmemory: pull array length argument to map forward X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=cf8c4d3d13b89bddc64a1b8a8a3fead8b9c87c92;p=people%2Fliuw%2Flibxenctrl-split%2Fxen.git tools/libs/foreignmemory: pull array length argument to map forward By having the "num" argument before the page and error arrays we can potentially use a variable-length-array argument ("int pages[num]") in the function prototype. However VLAs are a C99 feature and we are currently targetting C89 and later, so we don't actually make use of this here, merely arrange that we can switch to VLAs in the future without changing the function ABI. Signed-off-by: Ian Campbell Acked-by: Wei Liu Acked-by: Ian Jackson --- diff --git a/tools/libs/foreignmemory/compat.c b/tools/libs/foreignmemory/compat.c index 039297cb0c..b79ec1a9e7 100644 --- a/tools/libs/foreignmemory/compat.c +++ b/tools/libs/foreignmemory/compat.c @@ -22,8 +22,8 @@ #include "private.h" void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem, - uint32_t dom, int prot, - const xen_pfn_t *arr, int *err, size_t num) + uint32_t dom, int prot, size_t num, + const xen_pfn_t arr[/*num*/], int err[/*num*/]) { xen_pfn_t *pfn; unsigned int i; diff --git a/tools/libs/foreignmemory/core.c b/tools/libs/foreignmemory/core.c index 4e0541f7cd..cfb0a7373d 100644 --- a/tools/libs/foreignmemory/core.c +++ b/tools/libs/foreignmemory/core.c @@ -64,7 +64,8 @@ int xenforeignmemory_close(xenforeignmemory_handle *fmem) void *xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t dom, int prot, - const xen_pfn_t *arr, int *err, size_t num) + size_t num, + const xen_pfn_t arr[/*num*/], int err[/*num*/]) { void *ret; int *err_to_free = NULL; @@ -75,7 +76,7 @@ void *xenforeignmemory_map(xenforeignmemory_handle *fmem, if ( err == NULL ) return NULL; - ret = osdep_xenforeignmemory_map(fmem, dom, prot, arr, err, num); + ret = osdep_xenforeignmemory_map(fmem, dom, prot, num, arr, err); if ( ret == 0 && err_to_free ) { diff --git a/tools/libs/foreignmemory/freebsd.c b/tools/libs/foreignmemory/freebsd.c index ed26ebb8fe..703754f598 100644 --- a/tools/libs/foreignmemory/freebsd.c +++ b/tools/libs/foreignmemory/freebsd.c @@ -84,8 +84,8 @@ int osdep_xenforeignmemory_close(xenforeignmemory_handle *fmem) void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t dom, int prot, - const xen_pfn_t *arr, int *err, - size_t num) + size_t num, + const xen_pfn_t arr[/*num*/], int err[/*num*/]) { int fd = fmem->fd; privcmd_mmapbatch_t ioctlx; diff --git a/tools/libs/foreignmemory/include/xenforeignmemory.h b/tools/libs/foreignmemory/include/xenforeignmemory.h index 0ec6325f9b..3724c63b26 100644 --- a/tools/libs/foreignmemory/include/xenforeignmemory.h +++ b/tools/libs/foreignmemory/include/xenforeignmemory.h @@ -104,8 +104,8 @@ int xenforeignmemory_close(xenforeignmemory_handle *fmem); * of @err indicating failure to map every page. */ void *xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t dom, - int prot, const xen_pfn_t *arr, int *err, - size_t pages); + int prot, size_t pages, + const xen_pfn_t arr[/*pages*/], int err[/*pages*/]); /* * Unmap a mapping previous created with xenforeignmemory_map(). diff --git a/tools/libs/foreignmemory/linux.c b/tools/libs/foreignmemory/linux.c index 66203911ed..32b6defa1b 100644 --- a/tools/libs/foreignmemory/linux.c +++ b/tools/libs/foreignmemory/linux.c @@ -161,7 +161,8 @@ out: void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t dom, int prot, - const xen_pfn_t *arr, int *err, size_t num) + size_t num, + const xen_pfn_t arr[/*num*/], int err[/*num*/]) { int fd = fmem->fd; privcmd_mmapbatch_v2_t ioctlx; diff --git a/tools/libs/foreignmemory/minios.c b/tools/libs/foreignmemory/minios.c index bdc1239461..ca5ba7181e 100644 --- a/tools/libs/foreignmemory/minios.c +++ b/tools/libs/foreignmemory/minios.c @@ -41,7 +41,8 @@ int osdep_xenforeignmemory_close(xenforeignmemory_handle *fmem) void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t dom, int prot, - const xen_pfn_t *arr, int *err, size_t num) + size_t num, + const xen_pfn_t arr[/*num*/], int err[/*num*/]) { unsigned long pt_prot = 0; if (prot & PROT_READ) diff --git a/tools/libs/foreignmemory/private.h b/tools/libs/foreignmemory/private.h index 36a71ecc84..cd732fdf48 100644 --- a/tools/libs/foreignmemory/private.h +++ b/tools/libs/foreignmemory/private.h @@ -27,7 +27,8 @@ int osdep_xenforeignmemory_close(xenforeignmemory_handle *fmem); void *osdep_xenforeignmemory_map(xenforeignmemory_handle *fmem, uint32_t dom, int prot, - const xen_pfn_t *arr, int *err, size_t num); + size_t num, + const xen_pfn_t arr[num], int err[num]); int osdep_xenforeignmemory_unmap(xenforeignmemory_handle *fmem, void *addr, size_t num); diff --git a/tools/libxc/xc_foreign_memory.c b/tools/libxc/xc_foreign_memory.c index 4b24388980..4053d26851 100644 --- a/tools/libxc/xc_foreign_memory.c +++ b/tools/libxc/xc_foreign_memory.c @@ -28,7 +28,7 @@ void *xc_map_foreign_pages(xc_interface *xch, uint32_t dom, int prot, return NULL; } - return xenforeignmemory_map(xch->fmem, dom, prot, arr, NULL, num); + return xenforeignmemory_map(xch->fmem, dom, prot, num, arr, NULL); } void *xc_map_foreign_range(xc_interface *xch, @@ -84,7 +84,7 @@ void *xc_map_foreign_ranges(xc_interface *xch, void *xc_map_foreign_bulk(xc_interface *xch, uint32_t dom, int prot, const xen_pfn_t *arr, int *err, unsigned int num) { - return xenforeignmemory_map(xch->fmem, dom, prot, arr, err, num); + return xenforeignmemory_map(xch->fmem, dom, prot, num, arr, err); } /* diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c index 5a51f262bc..d4d33fda76 100644 --- a/tools/libxc/xc_sr_restore.c +++ b/tools/libxc/xc_sr_restore.c @@ -318,7 +318,7 @@ static int process_page_data(struct xc_sr_context *ctx, unsigned count, mapping = guest_page = xenforeignmemory_map(xch->fmem, ctx->domid, PROT_READ | PROT_WRITE, - mfns, map_errs, nr_pages); + nr_pages, mfns, map_errs); if ( !mapping ) { rc = -1; diff --git a/tools/libxc/xc_sr_save.c b/tools/libxc/xc_sr_save.c index fba4e40eb0..ccb000e74c 100644 --- a/tools/libxc/xc_sr_save.c +++ b/tools/libxc/xc_sr_save.c @@ -154,7 +154,7 @@ static int write_batch(struct xc_sr_context *ctx) if ( nr_pages > 0 ) { guest_mapping = xenforeignmemory_map(xch->fmem, - ctx->domid, PROT_READ, mfns, errors, nr_pages); + ctx->domid, PROT_READ, nr_pages, mfns, errors); if ( !guest_mapping ) { PERROR("Failed to map guest pages");