WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 1/3] libxl: add 2 consoles to stubdoms for save/resto

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 1/3] libxl: add 2 consoles to stubdoms for save/restore
From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date: Tue, 18 Jan 2011 17:17:51 +0000
Delivery-date: Tue, 18 Jan 2011 09:18:08 -0800
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)
Add two "special" PV consoles to stubdoms that are going to be used
to send and receive the qemu-xen save files on save/restore.

Rename the save file on resume so that it doesn't collide with the name
of the next save file.

Signed-off-by: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>


diff -r 59396addc940 tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Fri Jan 14 14:26:11 2011 +0000
+++ b/tools/libxl/libxl.c       Tue Jan 18 17:09:56 2011 +0000
@@ -750,7 +750,7 @@ int libxl_primary_console_exec(libxl_ctx
 {
     uint32_t stubdomid = libxl_get_stubdom_id(ctx, domid_vm);
     if (stubdomid)
-        return libxl_console_exec(ctx, stubdomid, 1, LIBXL_CONSTYPE_PV);
+        return libxl_console_exec(ctx, stubdomid, 3, LIBXL_CONSTYPE_PV);
     else {
         if (libxl__domain_is_hvm(ctx, domid_vm))
             return libxl_console_exec(ctx, domid_vm, 0, LIBXL_CONSTYPE_SERIAL);
diff -r 59396addc940 tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c        Fri Jan 14 14:26:11 2011 +0000
+++ b/tools/libxl/libxl_create.c        Tue Jan 18 17:09:56 2011 +0000
@@ -250,8 +250,12 @@ static int domain_restore(libxl_ctx *ctx
 
     dm_info->saved_state = NULL;
     if (info->hvm) {
+        char buf[100];
+        snprintf(buf, sizeof(buf), "/var/lib/xen/qemu-save.%d", domid);
         ret = asprintf(&dm_info->saved_state,
-                       "/var/lib/xen/qemu-save.%d", domid);
+                       "/var/lib/xen/qemu-restore.%d", domid);
+        if (ret >= 0)
+            ret = rename(buf, dm_info->saved_state);
         ret = (ret < 0) ? ERROR_FAIL : 0;
     }
 
diff -r 59396addc940 tools/libxl/libxl_dm.c
--- a/tools/libxl/libxl_dm.c    Fri Jan 14 14:26:11 2011 +0000
+++ b/tools/libxl/libxl_dm.c    Tue Jan 18 17:09:56 2011 +0000
@@ -430,7 +430,7 @@ static int libxl_create_stubdom(libxl_ct
                                 libxl__device_model_starting **starting_r)
 {
     libxl__gc gc = LIBXL_INIT_GC(ctx);
-    int i, num_console = 1, ret;
+    int i, num_console = 3, ret;
     libxl_device_console *console;
     libxl_domain_create_info c_info;
     libxl_domain_build_info b_info;
@@ -533,15 +533,28 @@ retry_transaction:
         console[i].devid = i;
         console[i].consback = LIBXL_CONSBACK_IOEMU;
         console[i].domid = domid;
-        if (!i) {
-            char *filename;
-            char *name = libxl__sprintf(&gc, "qemu-dm-%s", 
libxl_domid_to_name(ctx, info->domid));
-            libxl_create_logfile(ctx, name, &filename);
-            console[i].output = libxl__sprintf(&gc, "file:%s", filename);
-            console[i].build_state = &state;
-            free(filename);
-        } else
-            console[i].output = "pty";
+        switch (i) {
+            case 0:
+                {
+                    char *filename;
+                    char *name = libxl__sprintf(&gc, "qemu-dm-%s", 
libxl_domid_to_name(ctx, info->domid));
+                    libxl_create_logfile(ctx, name, &filename);
+                    console[i].output = libxl__sprintf(&gc, "file:%s", 
filename);
+                    console[i].build_state = &state;
+                    free(filename);
+                }
+                break;
+            case 1:
+                console[i].output = libxl__sprintf(&gc, 
"file:/var/lib/xen/qemu-save.%d", info->domid);
+                break;
+            case 2:
+                if (info->saved_state)
+                    console[i].output = libxl__sprintf(&gc, "filerw:%s", 
info->saved_state);
+                break;
+            default:
+                console[i].output = "pty";
+                break;
+        }
         ret = libxl_device_console_add(ctx, domid, &console[i]);
         if (ret)
             goto out_free;

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel