[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.