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] xl/libxl: introducing libxl_primary_console_exec

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] xl/libxl: introducing libxl_primary_console_exec
From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date: Fri, 16 Jul 2010 18:03:44 +0100
Delivery-date: Fri, 16 Jul 2010 10:04:03 -0700
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)
Hi all,
this patch introduces libxl_primary_console_exec: a new libxl function
that finds the domid and console number corresponding to the primary
console of a given vm. The domid might be different from the domid of
the VM and the console number might not be 0 when using stubdoms.
The caller (xl_cmdimpl.c in this case) has to make sure that the stubdom
is already created before calling libxl_primary_console_exec in the hvm
case. In the PV case libxl_primary_console_exec has to be called before
libxl_run_bootloader.

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

diff -r e382656e4dcc tools/libxl/libxl.c
--- a/tools/libxl/libxl.c       Fri Jul 16 16:19:51 2010 +0100
+++ b/tools/libxl/libxl.c       Fri Jul 16 17:56:58 2010 +0100
@@ -803,6 +803,15 @@
     return execl(p, p, domid_s, "--num", cons_num_s, (void *)NULL) == 0 ? 0 : 
ERROR_FAIL;
 }
 
+int libxl_primary_console_exec(struct libxl_ctx *ctx, uint32_t domid_vm)
+{
+    uint32_t stubdomid = libxl_get_stubdom_id(ctx, domid_vm);
+    if (stubdomid)
+        return libxl_console_exec(ctx, stubdomid, 1);
+    else
+        return libxl_console_exec(ctx, domid_vm, 0);
+}
+
 static char ** libxl_build_device_model_args(struct libxl_ctx *ctx,
                                              libxl_device_model_info *info,
                                              libxl_device_nic *vifs,
diff -r e382656e4dcc tools/libxl/libxl.h
--- a/tools/libxl/libxl.h       Fri Jul 16 16:19:51 2010 +0100
+++ b/tools/libxl/libxl.h       Fri Jul 16 17:56:58 2010 +0100
@@ -399,6 +399,11 @@
 int libxl_set_memory_target(struct libxl_ctx *ctx, uint32_t domid, uint32_t 
target_memkb, int enforce);
 
 int libxl_console_exec(struct libxl_ctx *ctx, uint32_t domid, int cons_num);
+/* libxl_primary_console_exec finds the domid and console number
+ * corresponding to the primary console of the given vm, then calls
+ * libxl_console_exec with the right arguments (domid might be different
+ * if the guest is using stubdoms) */ 
+int libxl_primary_console_exec(struct libxl_ctx *ctx, uint32_t domid_vm);
 
 int libxl_domain_info(struct libxl_ctx*, struct libxl_dominfo *info_r,
                       uint32_t domid);
diff -r e382656e4dcc tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c  Fri Jul 16 16:19:51 2010 +0100
+++ b/tools/libxl/xl_cmdimpl.c  Fri Jul 16 17:56:58 2010 +0100
@@ -947,9 +947,9 @@
     return r;
 }
 
-int autoconnect_console(int cons_num)
+int autoconnect_console(int hvm)
 {
-    int status;
+    int status, options;
     pid_t pid, r;
 
     /*
@@ -966,14 +966,21 @@
         return 0;
 
     /*
-     * Catch failure of the create process.
+     * In the PV case we only catch failure of the create process, in
+     * the HVM case we also wait for the creation process to be
+     * completed so that the stubdom is already up and running and we
+     * can connect to it.
      */
+    if (hvm)
+        options = 0;
+    else
+        options = WNOHANG;
     sleep(1);
-    r = waitpid(pid, &status, WNOHANG);
+    r = waitpid(pid, &status, options);
     if (r > 0 && WIFEXITED(status) && WEXITSTATUS(status) != 0)
         _exit(WEXITSTATUS(status));
 
-    libxl_console_exec(&ctx, domid, cons_num);
+    libxl_primary_console_exec(&ctx, domid);
     /* Do not return. xl continued in child process */
     fprintf(stderr, "Unable to attach console\n");
     _exit(1);
@@ -1170,7 +1177,7 @@
     }
 
     if (dom_info->console_autoconnect) {
-        ret = autoconnect_console(0);
+        ret = autoconnect_console(info1.hvm);
         if (ret)
             goto error_out;
     }
@@ -1624,18 +1631,13 @@
 
 int main_console(int argc, char **argv)
 {
-    int opt = 0, cons_num = 0;
+    int opt = 0;
 
     while ((opt = getopt(argc, argv, "hn:")) != -1) {
         switch (opt) {
         case 'h':
             help("console");
             exit(0);
-        case 'n':
-            if (optarg) {
-                cons_num = strtol(optarg, NULL, 10);
-            }
-            break;
         default:
             fprintf(stderr, "option not supported\n");
             break;
@@ -1647,7 +1649,7 @@
     }
 
     find_domain(argv[optind]);
-    libxl_console_exec(&ctx, domid, 0);
+    libxl_primary_console_exec(&ctx, domid);
     fprintf(stderr, "Unable to attach console\n");
     return 1;
 }

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

<Prev in Thread] Current Thread [Next in Thread>