[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] xc_domain_restore: Remove static variable 'completed'



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1276159429 -3600
# Node ID b311acfb274291190d83e587995137b16fc110f3
# Parent  6c3d8aec202d47668bf7f33e53921d7f4444b8a3
xc_domain_restore: Remove static variable 'completed'

Signed-off-by: Keir Fraser <keir.fraser@xxxxxxxxxx>
---
 tools/libxc/xc_domain_restore.c |   50 ++++++++++++++++++++--------------------
 1 files changed, 25 insertions(+), 25 deletions(-)

diff -r 6c3d8aec202d -r b311acfb2742 tools/libxc/xc_domain_restore.c
--- a/tools/libxc/xc_domain_restore.c   Thu Jun 10 09:35:16 2010 +0100
+++ b/tools/libxc/xc_domain_restore.c   Thu Jun 10 09:43:49 2010 +0100
@@ -40,16 +40,15 @@ struct restore_ctx {
     xen_pfn_t *live_p2m; /* Live mapping of the table mapping each PFN to its 
current MFN. */
     xen_pfn_t *p2m; /* A table mapping each PFN to its new MFN. */
     xen_pfn_t *p2m_batch; /* A table of P2M mappings in the current region.  */
+    int completed; /* Set when a consistent image is available */
     struct domain_info_context dinfo;
 };
 
-/* set when a consistent image is available */
-static int completed = 0;
-
 #define HEARTBEAT_MS 1000
 
 #ifndef __MINIOS__
-static ssize_t rdexact(struct xc_interface *xch, int fd, void* buf, size_t 
size)
+static ssize_t rdexact(struct xc_interface *xch, struct restore_ctx *ctx,
+                       int fd, void* buf, size_t size)
 {
     size_t offset = 0;
     ssize_t len;
@@ -58,7 +57,7 @@ static ssize_t rdexact(struct xc_interfa
 
     while ( offset < size )
     {
-        if ( completed ) {
+        if ( ctx->completed ) {
             /* expect a heartbeat every HEARBEAT_MS ms maximum */
             tv.tv_sec = HEARTBEAT_MS / 1000;
             tv.tv_usec = (HEARTBEAT_MS % 1000) * 1000;
@@ -88,7 +87,7 @@ static ssize_t rdexact(struct xc_interfa
     return 0;
 }
 
-#define RDEXACT(fd,buf,size) rdexact(xch, fd, buf, size)
+#define RDEXACT(fd,buf,size) rdexact(xch, ctx, fd, buf, size)
 #else
 #define RDEXACT read_exact
 #endif
@@ -330,7 +329,7 @@ typedef struct {
 } tailbuf_t;
 
 /* read stream until EOF, growing buffer as necssary */
-static int compat_buffer_qemu(xc_interface *xch,
+static int compat_buffer_qemu(xc_interface *xch, struct restore_ctx *ctx,
                               int fd, struct tailbuf_hvm *buf)
 {
     uint8_t *qbuf, *tmp;
@@ -379,7 +378,7 @@ static int compat_buffer_qemu(xc_interfa
     return 0;
 }
 
-static int buffer_qemu(xc_interface *xch,
+static int buffer_qemu(xc_interface *xch, struct restore_ctx *ctx,
                        int fd, struct tailbuf_hvm *buf)
 {
     uint32_t qlen;
@@ -494,9 +493,9 @@ static int buffer_tail_hvm(xc_interface 
      * until EOF. Remus gets around this by sending a different signature
      * which includes a length prefix */
     if ( !memcmp(qemusig, "QemuDeviceModelRecord", sizeof(qemusig)) )
-        return compat_buffer_qemu(xch, fd, buf);
+        return compat_buffer_qemu(xch, ctx, fd, buf);
     else if ( !memcmp(qemusig, "RemusDeviceModelState", sizeof(qemusig)) )
-        return buffer_qemu(xch, fd, buf);
+        return buffer_qemu(xch, ctx, fd, buf);
 
     qemusig[20] = '\0';
     ERROR("Invalid QEMU signature: %s", qemusig);
@@ -661,7 +660,7 @@ static void pagebuf_free(pagebuf_t* buf)
     }
 }
 
-static int pagebuf_get_one(xc_interface *xch,
+static int pagebuf_get_one(xc_interface *xch, struct restore_ctx *ctx,
                            pagebuf_t* buf, int fd, uint32_t dom)
 {
     int count, countpages, oldcount, i;
@@ -681,7 +680,7 @@ static int pagebuf_get_one(xc_interface 
     } else if (count == -1) {
         DPRINTF("Entering page verify mode\n");
         buf->verify = 1;
-        return pagebuf_get_one(xch, buf, fd, dom);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     } else if (count == -2) {
         buf->new_ctxt_format = 1;
         if ( RDEXACT(fd, &buf->max_vcpu_id, sizeof(buf->max_vcpu_id)) ||
@@ -691,7 +690,7 @@ static int pagebuf_get_one(xc_interface 
             return -1;
         }
         // DPRINTF("Max VCPU ID: %d, vcpumap: %llx\n", buf->max_vcpu_id, 
buf->vcpumap);
-        return pagebuf_get_one(xch, buf, fd, dom);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     } else if (count == -3) {
         /* Skip padding 4 bytes then read the EPT identity PT location. */
         if ( read_exact(fd, &buf->identpt, sizeof(uint32_t)) ||
@@ -701,7 +700,7 @@ static int pagebuf_get_one(xc_interface 
             return -1;
         }
         // DPRINTF("EPT identity map address: %llx\n", buf->identpt);
-        return pagebuf_get_one(xch, buf, fd, dom);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     } else if ( count == -4 )  {
         /* Skip padding 4 bytes then read the vm86 TSS location. */
         if ( read_exact(fd, &buf->vm86_tss, sizeof(uint32_t)) ||
@@ -711,21 +710,21 @@ static int pagebuf_get_one(xc_interface 
             return -1;
         }
         // DPRINTF("VM86 TSS location: %llx\n", buf->vm86_tss);
-        return pagebuf_get_one(xch, buf, fd, dom);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     } else if ( count == -5 ) {
         DPRINTF("xc_domain_restore start tmem\n");
         if ( xc_tmem_restore(xch, dom, fd) ) {
             PERROR("error reading/restoring tmem");
             return -1;
         }
-        return pagebuf_get_one(xch, buf, fd, dom);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     }
     else if ( count == -6 ) {
         if ( xc_tmem_restore_extra(xch, dom, fd) ) {
             PERROR("error reading/restoring tmem extra");
             return -1;
         }
-        return pagebuf_get_one(xch, buf, fd, dom);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     } else if ( count == -7 ) {
         uint32_t tsc_mode, khz, incarn;
         uint64_t nsec;
@@ -737,7 +736,7 @@ static int pagebuf_get_one(xc_interface 
             PERROR("error reading/restoring tsc info");
             return -1;
         }
-        return pagebuf_get_one(xch, buf, fd, dom);
+        return pagebuf_get_one(xch, ctx, buf, fd, dom);
     } else if ( (count > MAX_BATCH_SIZE) || (count < 0) ) {
         ERROR("Max batch size exceeded (%d). Giving up.", count);
         errno = EMSGSIZE;
@@ -793,14 +792,15 @@ static int pagebuf_get_one(xc_interface 
     return count;
 }
 
-static int pagebuf_get(xc_interface *xch, pagebuf_t* buf, int fd, uint32_t dom)
+static int pagebuf_get(xc_interface *xch, struct restore_ctx *ctx,
+                       pagebuf_t* buf, int fd, uint32_t dom)
 {
     int rc;
 
     buf->nr_physpages = buf->nr_pages = 0;
 
     do {
-        rc = pagebuf_get_one(xch, buf, fd, dom);
+        rc = pagebuf_get_one(xch, ctx, buf, fd, dom);
     } while (rc > 0);
 
     if (rc < 0)
@@ -1185,9 +1185,9 @@ int xc_domain_restore(xc_interface *xch,
 
         xc_report_progress_step(xch, n, dinfo->p2m_size);
 
-        if ( !completed ) {
+        if ( !ctx->completed ) {
             pagebuf.nr_physpages = pagebuf.nr_pages = 0;
-            if ( pagebuf_get_one(xch, &pagebuf, io_fd, dom) < 0 ) {
+            if ( pagebuf_get_one(xch, ctx, &pagebuf, io_fd, dom) < 0 ) {
                 PERROR("Error when reading batch");
                 goto out;
             }
@@ -1253,7 +1253,7 @@ int xc_domain_restore(xc_interface *xch,
 
     // DPRINTF("Received all pages (%d races)\n", nraces);
 
-    if ( !completed ) {
+    if ( !ctx->completed ) {
         int flags = 0;
 
         if ( buffer_tail(xch, ctx, &tailbuf, io_fd, max_vcpu_id, vcpumap,
@@ -1261,7 +1261,7 @@ int xc_domain_restore(xc_interface *xch,
             ERROR ("error buffering image tail");
             goto out;
         }
-        completed = 1;
+        ctx->completed = 1;
         /* shift into nonblocking mode for the remainder */
         if ( (flags = fcntl(io_fd, F_GETFL,0)) < 0 )
             flags = 0;
@@ -1270,7 +1270,7 @@ int xc_domain_restore(xc_interface *xch,
 
     // DPRINTF("Buffered checkpoint\n");
 
-    if ( pagebuf_get(xch, &pagebuf, io_fd, dom) ) {
+    if ( pagebuf_get(xch, ctx, &pagebuf, io_fd, dom) ) {
         PERROR("error when buffering batch, finishing");
         goto finish;
     }

_______________________________________________
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®.