[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] libxc: mmapbatch-v2 adjustments
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1264157991 0 # Node ID 9c6ba538ce75f73c40208aa445eeee38dcc453d8 # Parent fbe8f32fa257e6d8e02cd4c84ccbe61dd31f1906 libxc: mmapbatch-v2 adjustments Just like the kernel, the fallback implementation of xc_map_foreign_bulk() should clear the error indication array upon success. Also, a few allocations were needlessly using calloc() instead of malloc(). Finally, in xc_domain_save() allocate the error indicator array once (along with the other arrays) instead of using realloc() (without error checking) in the loop body. Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> --- tools/libxc/xc_domain_save.c | 4 ++-- tools/libxc/xc_linux.c | 2 +- tools/libxc/xc_misc.c | 7 ++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff -r fbe8f32fa257 -r 9c6ba538ce75 tools/libxc/xc_domain_save.c --- a/tools/libxc/xc_domain_save.c Fri Jan 22 10:59:03 2010 +0000 +++ b/tools/libxc/xc_domain_save.c Fri Jan 22 10:59:51 2010 +0000 @@ -1059,7 +1059,8 @@ int xc_domain_save(int xc_handle, int io pfn_type = xc_memalign(PAGE_SIZE, ROUNDUP( MAX_BATCH_SIZE * sizeof(*pfn_type), PAGE_SHIFT)); pfn_batch = calloc(MAX_BATCH_SIZE, sizeof(*pfn_batch)); - if ( (pfn_type == NULL) || (pfn_batch == NULL) ) + pfn_err = malloc(MAX_BATCH_SIZE * sizeof(*pfn_err)); + if ( (pfn_type == NULL) || (pfn_batch == NULL) || (pfn_err == NULL) ) { ERROR("failed to alloc memory for pfn_type and/or pfn_batch arrays"); errno = ENOMEM; @@ -1273,7 +1274,6 @@ int xc_domain_save(int xc_handle, int io if ( batch == 0 ) goto skip; /* vanishingly unlikely... */ - pfn_err = realloc(pfn_err, sizeof(int) * batch); region_base = xc_map_foreign_bulk( xc_handle, dom, PROT_READ, pfn_type, pfn_err, batch); if ( region_base == NULL ) diff -r fbe8f32fa257 -r 9c6ba538ce75 tools/libxc/xc_linux.c --- a/tools/libxc/xc_linux.c Fri Jan 22 10:59:03 2010 +0000 +++ b/tools/libxc/xc_linux.c Fri Jan 22 10:59:51 2010 +0000 @@ -186,7 +186,7 @@ void *xc_map_foreign_bulk(int xc_handle, * IOCTL_PRIVCMD_MMAPBATCH_V2 is not supported - fall back to * IOCTL_PRIVCMD_MMAPBATCH. */ - xen_pfn_t *pfn = calloc(num, sizeof(*pfn)); + xen_pfn_t *pfn = malloc(num * sizeof(*pfn)); if ( pfn ) { diff -r fbe8f32fa257 -r 9c6ba538ce75 tools/libxc/xc_misc.c --- a/tools/libxc/xc_misc.c Fri Jan 22 10:59:03 2010 +0000 +++ b/tools/libxc/xc_misc.c Fri Jan 22 10:59:51 2010 +0000 @@ -360,7 +360,7 @@ void *xc_map_foreign_pages(int xc_handle return NULL; } - err = calloc(num, sizeof(*err)); + err = malloc(num * sizeof(*err)); if (!err) return NULL; @@ -397,7 +397,7 @@ xc_map_foreign_bulk(int xc_handle, uint3 return NULL; } - pfn = calloc(num, sizeof(*pfn)); + pfn = malloc(num * sizeof(*pfn)); if (!pfn) { errno = ENOMEM; return NULL; @@ -416,7 +416,8 @@ xc_map_foreign_bulk(int xc_handle, uint3 err[i] = -EINVAL; break; } - } + } else + memset(err, 0, num * sizeof(*err)); free(pfn); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |