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 <ian.campbell@citrix.com>
Acked-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
Ian Campbell committed 2016-01-22 12:24:19 +00:00
1 parent bd1c1ea440
commit cf8c4d3d13
10 files changed
+19 -15

No files matched your search

+2 -2
View File
@@ -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;
+3 -2
View File
@@ -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 )
{
+2 -2
View File
@@ -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;
@@ -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().
+2 -1
View File
@@ -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;
+2 -1
View File
@@ -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)
+2 -1
View File
@@ -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);
+2 -2
View File
@@ -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);
}
/*
+1 -1
View File
@@ -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;
+1 -1
View File
@@ -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");
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.