# HG changeset patch
# User Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
# Date 1317386335 -7200
# Node ID 84a27a9f39f29194a7344e842b2055f592a42250
# Parent 156626fef95b36184ad44dfcb049bae2545435f0
libxl: only use interactive PyGrub mode when a console is attached
Sometimes PyGrub freezed when trying to create a domain without the console
attached (without "-c"). This patch adds the "-q" option to PyGrub when "-c" is
not specified at creation time. PyGrub freezed trying to set terminal
attributes (like reset_prog_mode or nocbreak).
Signed-off-by: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
diff -r 156626fef95b -r 84a27a9f39f2 tools/libxl/libxl.h
--- a/tools/libxl/libxl.h Fri Sep 30 14:38:55 2011 +0200
+++ b/tools/libxl/libxl.h Fri Sep 30 14:38:55 2011 +0200
@@ -287,7 +287,8 @@ int libxl_get_max_cpus(libxl_ctx *ctx);
int libxl_run_bootloader(libxl_ctx *ctx,
libxl_domain_build_info *info,
libxl_device_disk *disk,
- uint32_t domid);
+ uint32_t domid,
+ libxl_console_ready cb);
/* 0 means ERROR_ENOMEM, which we have logged */
diff -r 156626fef95b -r 84a27a9f39f2 tools/libxl/libxl_bootloader.c
--- a/tools/libxl/libxl_bootloader.c Fri Sep 30 14:38:55 2011 +0200
+++ b/tools/libxl/libxl_bootloader.c Fri Sep 30 14:38:55 2011 +0200
@@ -33,7 +33,8 @@
static char **make_bootloader_args(libxl__gc *gc,
libxl_domain_build_info *info,
uint32_t domid,
- const char *fifo, char *disk)
+ const char *fifo, char *disk,
+ libxl_console_ready cb)
{
flexarray_t *args;
int nr = 0;
@@ -55,6 +56,8 @@ static char **make_bootloader_args(libxl
flexarray_set(args, nr++, libxl__sprintf(gc, "--output=%s", fifo));
flexarray_set(args, nr++, "--output-format=simple0");
flexarray_set(args, nr++, libxl__sprintf(gc, "--output-directory=%s",
"/var/run/libxl/"));
+ if (!cb)
+ flexarray_set(args, nr++, "-q");
if (info->u.pv.bootloader_args) {
char *saveptr;
@@ -300,7 +303,8 @@ static void parse_bootloader_result(libx
int libxl_run_bootloader(libxl_ctx *ctx,
libxl_domain_build_info *info,
libxl_device_disk *disk,
- uint32_t domid)
+ uint32_t domid,
+ libxl_console_ready cb)
{
libxl__gc gc = LIBXL_INIT_GC(ctx);
int ret, rc = 0;
@@ -362,7 +366,7 @@ int libxl_run_bootloader(libxl_ctx *ctx,
goto out_close;
}
- args = make_bootloader_args(&gc, info, domid, fifo, diskpath);
+ args = make_bootloader_args(&gc, info, domid, fifo, diskpath, cb);
if (args == NULL) {
rc = ERROR_NOMEM;
goto out_close;
diff -r 156626fef95b -r 84a27a9f39f2 tools/libxl/libxl_create.c
--- a/tools/libxl/libxl_create.c Fri Sep 30 14:38:55 2011 +0200
+++ b/tools/libxl/libxl_create.c Fri Sep 30 14:38:55 2011 +0200
@@ -461,7 +461,7 @@ static int do_domain_create(libxl__gc *g
}
if ( restore_fd < 0 ) {
- ret = libxl_run_bootloader(ctx, &d_config->b_info, d_config->num_disks
> 0 ? &d_config->disks[0] : NULL, domid);
+ ret = libxl_run_bootloader(ctx, &d_config->b_info, d_config->num_disks
> 0 ? &d_config->disks[0] : NULL, domid, cb);
if (ret) {
LIBXL__LOG(ctx, LIBXL__LOG_ERROR,
"failed to run bootloader: %d", ret);
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|