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

Re: [Xen-devel] [PATCH] xl/libxl: introducing libxl_primary_console_exec

To: "Gianni Tedesco (3P)" <gianni.tedesco@xxxxxxxxxx>
Subject: Re: [Xen-devel] [PATCH] xl/libxl: introducing libxl_primary_console_exec
From: Stefano Stabellini <stefano.stabellini@xxxxxxxxxxxxx>
Date: Mon, 19 Jul 2010 11:55:26 +0100
Cc: "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Stefano Stabellini <Stefano.Stabellini@xxxxxxxxxxxxx>
Delivery-date: Mon, 19 Jul 2010 03:55:44 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <1279302042.1723.1872.camel@xxxxxxxxxxxxxxxxxxxxxx>
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>
References: <alpine.DEB.2.00.1007161755250.21432@kaball-desktop> <1279302042.1723.1872.camel@xxxxxxxxxxxxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)
On Fri, 16 Jul 2010, Gianni Tedesco (3P) wrote:
> On Fri, 2010-07-16 at 18:03 +0100, Stefano Stabellini wrote:
> > 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.
> 
> ... snip ...
> 
> >  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);
> 
> If this call has some none-obvious ordering constraints then that should
> be mentioned in the header no?
> 
 
Yes, you are right.
This is the updated version of the patch:

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       Mon Jul 19 11:54:45 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       Mon Jul 19 11:54:45 2010 +0100
@@ -399,6 +399,14 @@
 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).
+ * This function can be called after creating the device model, in
+ * case of HVM guests, and before libxl_run_bootloader in case of PV
+ * guests using pygrub. */ 
+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  Mon Jul 19 11:54:45 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>