All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] fix migration failure with xl migrate --debug
@ 2014-11-28  0:28 M A Young
  2014-11-28  8:27 ` Ian Campbell
  0 siblings, 1 reply; 7+ messages in thread
From: M A Young @ 2014-11-28  0:28 UTC (permalink / raw)
  To: xen-devel
  Cc: Wei Liu, Andrew Cooper, Ian Jackson, Ian Campbell,
	Stefano Stabellini

Migrations with xl migrate --debug will fail because debugging information 
from the receiving process is written to the stdout channel. This channel 
is also used for status messages so the migration will fail as the sending 
process receives an unexpected message. This patch moves the debugging 
information to the stderr channel.

Version 2 moves some output back to stdout that was accidentally moved 
to stderr in the first version.

Signed-off-by: Michael Young <m.a.young@durham.ac.uk>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] fix migration failure with xl migrate --debug
  2014-11-28  0:28 [PATCH v2] fix migration failure with xl migrate --debug M A Young
@ 2014-11-28  8:27 ` Ian Campbell
  2014-11-28  8:32   ` M A Young
  0 siblings, 1 reply; 7+ messages in thread
From: Ian Campbell @ 2014-11-28  8:27 UTC (permalink / raw)
  To: M A Young
  Cc: Wei Liu, Stefano Stabellini, Ian Jackson, Andrew Cooper,
	xen-devel

On Fri, 2014-11-28 at 00:28 +0000, M A Young wrote:
> Migrations with xl migrate --debug will fail because debugging information 
> from the receiving process is written to the stdout channel. This channel 
> is also used for status messages so the migration will fail as the sending 
> process receives an unexpected message. This patch moves the debugging 
> information to the stderr channel.
> 
> Version 2 moves some output back to stdout that was accidentally moved 
> to stderr in the first version.
> 
> Signed-off-by: Michael Young <m.a.young@durham.ac.uk>

I think you've forgotten the attachment.

Ian.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] fix migration failure with xl migrate --debug
  2014-11-28  8:27 ` Ian Campbell
@ 2014-11-28  8:32   ` M A Young
  2014-11-28 11:49     ` Ian Campbell
  0 siblings, 1 reply; 7+ messages in thread
From: M A Young @ 2014-11-28  8:32 UTC (permalink / raw)
  To: Ian Campbell
  Cc: Wei Liu, Stefano Stabellini, Ian Jackson, Andrew Cooper,
	xen-devel

[-- Attachment #1: Type: TEXT/PLAIN, Size: 682 bytes --]

On Fri, 28 Nov 2014, Ian Campbell wrote:

> On Fri, 2014-11-28 at 00:28 +0000, M A Young wrote:
>> Migrations with xl migrate --debug will fail because debugging information
>> from the receiving process is written to the stdout channel. This channel
>> is also used for status messages so the migration will fail as the sending
>> process receives an unexpected message. This patch moves the debugging
>> information to the stderr channel.
>>
>> Version 2 moves some output back to stdout that was accidentally moved
>> to stderr in the first version.
>>
>> Signed-off-by: Michael Young <m.a.young@durham.ac.uk>
>
> I think you've forgotten the attachment.

Yes, I did. Here it is.

[-- Attachment #2: Type: TEXT/PLAIN, Size: 19493 bytes --]

Use stderr for debugging messages for xl migrate --debug as stdout is used
for status messages.

--- xen-4.5.0-rc1/tools/libxl/xl_cmdimpl.c.orig	2014-10-24 15:22:40.000000000 +0100
+++ xen-4.5.0-rc1/tools/libxl/xl_cmdimpl.c	2014-11-26 22:41:41.697043321 +0000
@@ -380,10 +380,10 @@
 }
 static void printf_info(enum output_format output_format,
                         int domid,
-                        libxl_domain_config *d_config)
+                        libxl_domain_config *d_config, FILE *fh)
 {
     if (output_format == OUTPUT_FORMAT_SXP)
-        return printf_info_sexp(domid, d_config);
+        return printf_info_sexp(domid, d_config, fh);
 
     const char *buf;
     libxl_yajl_length len = 0;
@@ -404,7 +404,7 @@
     if (s != yajl_gen_status_ok)
         goto out;
 
-    puts(buf);
+    fputs(buf, fh);
 
 out:
     yajl_gen_free(hand);
@@ -413,7 +413,13 @@
         fprintf(stderr,
                 "unable to format domain config as JSON (YAJL:%d)\n", s);
 
-    if (ferror(stdout) || fflush(stdout)) { perror("stdout"); exit(-1); }
+    if (ferror(fh) || fflush(fh)) {
+        if (fh == stdout)
+            perror("stdout");
+        else
+            perror("stderr");
+        exit(-1);
+    }
 }
 
 static int do_daemonize(char *name)
@@ -2423,7 +2429,7 @@
     }
 
     if (!dom_info->quiet)
-        printf("Parsing config from %s\n", config_source);
+        fprintf(stderr, "Parsing config from %s\n", config_source);
 
     if (config_in_json) {
         libxl_domain_config_from_json(ctx, &d_config,
@@ -2451,7 +2457,7 @@
     }
 
     if (debug || dom_info->dryrun)
-        printf_info(default_output_format, -1, &d_config);
+        printf_info(default_output_format, -1, &d_config, stderr);
 
     ret = 0;
     if (dom_info->dryrun)
@@ -3403,7 +3409,7 @@
         if (default_output_format == OUTPUT_FORMAT_JSON)
             s = printf_info_one_json(hand, info[i].domid, &d_config);
         else
-            printf_info_sexp(info[i].domid, &d_config);
+            printf_info_sexp(info[i].domid, &d_config, stdout);
         libxl_domain_config_dispose(&d_config);
         if (s != yajl_gen_status_ok)
             goto out;
@@ -4725,7 +4731,7 @@
     parse_config_data(filename, config_data, config_len, &d_config);
 
     if (debug || dryrun_only)
-        printf_info(default_output_format, -1, &d_config);
+        printf_info(default_output_format, -1, &d_config, stdout);
 
     if (!dryrun_only) {
         fprintf(stderr, "setting dom%d configuration\n", domid);
--- xen-4.5.0-rc1/tools/libxl/xl_sxp.c.orig	2014-10-24 15:22:40.000000000 +0100
+++ xen-4.5.0-rc1/tools/libxl/xl_sxp.c	2014-11-26 22:30:58.416394082 +0000
@@ -30,7 +30,7 @@
 /* In general you should not add new output to this function since it
  * is intended only for legacy use.
  */
-void printf_info_sexp(int domid, libxl_domain_config *d_config)
+void printf_info_sexp(int domid, libxl_domain_config *d_config, FILE *fh)
 {
     int i;
     libxl_dominfo info;
@@ -38,195 +38,195 @@
     libxl_domain_create_info *c_info = &d_config->c_info;
     libxl_domain_build_info *b_info = &d_config->b_info;
 
-    printf("(domain\n\t(domid %d)\n", domid);
-    printf("\t(create_info)\n");
-    printf("\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
-    printf("\t(hap %s)\n", libxl_defbool_to_string(c_info->hap));
-    printf("\t(oos %s)\n", libxl_defbool_to_string(c_info->oos));
-    printf("\t(ssidref %d)\n", c_info->ssidref);
-    printf("\t(name %s)\n", c_info->name);
+    fprintf(fh, "(domain\n\t(domid %d)\n", domid);
+    fprintf(fh, "\t(create_info)\n");
+    fprintf(fh, "\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
+    fprintf(fh, "\t(hap %s)\n", libxl_defbool_to_string(c_info->hap));
+    fprintf(fh, "\t(oos %s)\n", libxl_defbool_to_string(c_info->oos));
+    fprintf(fh, "\t(ssidref %d)\n", c_info->ssidref);
+    fprintf(fh, "\t(name %s)\n", c_info->name);
 
     /* retrieve the UUID from dominfo, since it is probably generated
      * during parsing and thus does not match the real one
      */
     if (libxl_domain_info(ctx, &info, domid) == 0) {
-        printf("\t(uuid " LIBXL_UUID_FMT ")\n", LIBXL_UUID_BYTES(info.uuid));
+        fprintf(fh, "\t(uuid " LIBXL_UUID_FMT ")\n", LIBXL_UUID_BYTES(info.uuid));
     } else {
-        printf("\t(uuid <unknown>)\n");
+        fprintf(fh, "\t(uuid <unknown>)\n");
     }
     if (c_info->pool_name)
-        printf("\t(cpupool %s)\n", c_info->pool_name);
+        fprintf(fh, "\t(cpupool %s)\n", c_info->pool_name);
     if (c_info->xsdata)
-        printf("\t(xsdata contains data)\n");
+        fprintf(fh, "\t(xsdata contains data)\n");
     else
-        printf("\t(xsdata (null))\n");
+        fprintf(fh, "\t(xsdata (null))\n");
     if (c_info->platformdata)
-        printf("\t(platformdata contains data)\n");
+        fprintf(fh, "\t(platformdata contains data)\n");
     else
-        printf("\t(platformdata (null))\n");
+        fprintf(fh, "\t(platformdata (null))\n");
 
 
-    printf("\t(build_info)\n");
-    printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
-    printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
-    printf("\t(max_memkb %"PRId64")\n", b_info->max_memkb);
-    printf("\t(target_memkb %"PRId64")\n", b_info->target_memkb);
-    printf("\t(nomigrate %s)\n",
+    fprintf(fh, "\t(build_info)\n");
+    fprintf(fh, "\t(max_vcpus %d)\n", b_info->max_vcpus);
+    fprintf(fh, "\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
+    fprintf(fh, "\t(max_memkb %"PRId64")\n", b_info->max_memkb);
+    fprintf(fh, "\t(target_memkb %"PRId64")\n", b_info->target_memkb);
+    fprintf(fh, "\t(nomigrate %s)\n",
            libxl_defbool_to_string(b_info->disable_migrate));
 
     if (c_info->type == LIBXL_DOMAIN_TYPE_PV && b_info->u.pv.bootloader) {
-        printf("\t(bootloader %s)\n", b_info->u.pv.bootloader);
+        fprintf(fh, "\t(bootloader %s)\n", b_info->u.pv.bootloader);
         if (b_info->u.pv.bootloader_args) {
-            printf("\t(bootloader_args");
+            fprintf(fh, "\t(bootloader_args");
             for (i=0; b_info->u.pv.bootloader_args[i]; i++)
-                printf(" %s", b_info->u.pv.bootloader_args[i]);
-            printf(")\n");
+                fprintf(fh, " %s", b_info->u.pv.bootloader_args[i]);
+            fprintf(fh, ")\n");
         }
     }
 
-    printf("\t(image\n");
+    fprintf(fh, "\t(image\n");
     switch (c_info->type) {
     case LIBXL_DOMAIN_TYPE_HVM:
-        printf("\t\t(hvm\n");
-        printf("\t\t\t(firmware %s)\n", b_info->u.hvm.firmware);
-        printf("\t\t\t(video_memkb %"PRId64")\n", b_info->video_memkb);
-        printf("\t\t\t(shadow_memkb %"PRId64")\n", b_info->shadow_memkb);
-        printf("\t\t\t(pae %s)\n", libxl_defbool_to_string(b_info->u.hvm.pae));
-        printf("\t\t\t(apic %s)\n",
+        fprintf(fh, "\t\t(hvm\n");
+        fprintf(fh, "\t\t\t(firmware %s)\n", b_info->u.hvm.firmware);
+        fprintf(fh, "\t\t\t(video_memkb %"PRId64")\n", b_info->video_memkb);
+        fprintf(fh, "\t\t\t(shadow_memkb %"PRId64")\n", b_info->shadow_memkb);
+        fprintf(fh, "\t\t\t(pae %s)\n", libxl_defbool_to_string(b_info->u.hvm.pae));
+        fprintf(fh, "\t\t\t(apic %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.apic));
-        printf("\t\t\t(acpi %s)\n",
+        fprintf(fh, "\t\t\t(acpi %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.acpi));
-        printf("\t\t\t(nx %s)\n", libxl_defbool_to_string(b_info->u.hvm.nx));
-        printf("\t\t\t(viridian %s)\n",
+        fprintf(fh, "\t\t\t(nx %s)\n", libxl_defbool_to_string(b_info->u.hvm.nx));
+        fprintf(fh, "\t\t\t(viridian %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.viridian));
-        printf("\t\t\t(hpet %s)\n",
+        fprintf(fh, "\t\t\t(hpet %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.hpet));
-        printf("\t\t\t(vpt_align %s)\n",
+        fprintf(fh, "\t\t\t(vpt_align %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.vpt_align));
-        printf("\t\t\t(timer_mode %s)\n",
+        fprintf(fh, "\t\t\t(timer_mode %s)\n",
                libxl_timer_mode_to_string(b_info->u.hvm.timer_mode));
-        printf("\t\t\t(nestedhvm %s)\n",
+        fprintf(fh, "\t\t\t(nestedhvm %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.nested_hvm));
-        printf("\t\t\t(stdvga %s)\n", b_info->u.hvm.vga.kind ==
+        fprintf(fh, "\t\t\t(stdvga %s)\n", b_info->u.hvm.vga.kind ==
                                       LIBXL_VGA_INTERFACE_TYPE_STD ?
                                       "True" : "False");
-        printf("\t\t\t(vnc %s)\n",
+        fprintf(fh, "\t\t\t(vnc %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.vnc.enable));
-        printf("\t\t\t(vnclisten %s)\n", b_info->u.hvm.vnc.listen);
-        printf("\t\t\t(vncdisplay %d)\n", b_info->u.hvm.vnc.display);
-        printf("\t\t\t(vncunused %s)\n",
+        fprintf(fh, "\t\t\t(vnclisten %s)\n", b_info->u.hvm.vnc.listen);
+        fprintf(fh, "\t\t\t(vncdisplay %d)\n", b_info->u.hvm.vnc.display);
+        fprintf(fh, "\t\t\t(vncunused %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.vnc.findunused));
-        printf("\t\t\t(keymap %s)\n", b_info->u.hvm.keymap);
-        printf("\t\t\t(sdl %s)\n",
+        fprintf(fh, "\t\t\t(keymap %s)\n", b_info->u.hvm.keymap);
+        fprintf(fh, "\t\t\t(sdl %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.sdl.enable));
-        printf("\t\t\t(opengl %s)\n",
+        fprintf(fh, "\t\t\t(opengl %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.sdl.opengl));
-        printf("\t\t\t(nographic %s)\n",
+        fprintf(fh, "\t\t\t(nographic %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.nographic));
-        printf("\t\t\t(spice %s)\n",
+        fprintf(fh, "\t\t\t(spice %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.spice.enable));
-        printf("\t\t\t(spiceport %d)\n", b_info->u.hvm.spice.port);
-        printf("\t\t\t(spicetls_port %d)\n", b_info->u.hvm.spice.tls_port);
-        printf("\t\t\t(spicehost %s)\n", b_info->u.hvm.spice.host);
-        printf("\t\t\t(spicedisable_ticketing %s)\n",
+        fprintf(fh, "\t\t\t(spiceport %d)\n", b_info->u.hvm.spice.port);
+        fprintf(fh, "\t\t\t(spicetls_port %d)\n", b_info->u.hvm.spice.tls_port);
+        fprintf(fh, "\t\t\t(spicehost %s)\n", b_info->u.hvm.spice.host);
+        fprintf(fh, "\t\t\t(spicedisable_ticketing %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.spice.disable_ticketing));
-        printf("\t\t\t(spiceagent_mouse %s)\n",
+        fprintf(fh, "\t\t\t(spiceagent_mouse %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.spice.agent_mouse));
 
-        printf("\t\t\t(device_model %s)\n", b_info->device_model ? : "default");
-        printf("\t\t\t(gfx_passthru %s)\n",
+        fprintf(fh, "\t\t\t(device_model %s)\n", b_info->device_model ? : "default");
+        fprintf(fh, "\t\t\t(gfx_passthru %s)\n",
                libxl_defbool_to_string(b_info->u.hvm.gfx_passthru));
-        printf("\t\t\t(serial %s)\n", b_info->u.hvm.serial);
-        printf("\t\t\t(boot %s)\n", b_info->u.hvm.boot);
-        printf("\t\t\t(usb %s)\n", libxl_defbool_to_string(b_info->u.hvm.usb));
-        printf("\t\t\t(usbdevice %s)\n", b_info->u.hvm.usbdevice);
-        printf("\t\t)\n");
+        fprintf(fh, "\t\t\t(serial %s)\n", b_info->u.hvm.serial);
+        fprintf(fh, "\t\t\t(boot %s)\n", b_info->u.hvm.boot);
+        fprintf(fh, "\t\t\t(usb %s)\n", libxl_defbool_to_string(b_info->u.hvm.usb));
+        fprintf(fh, "\t\t\t(usbdevice %s)\n", b_info->u.hvm.usbdevice);
+        fprintf(fh, "\t\t)\n");
         break;
     case LIBXL_DOMAIN_TYPE_PV:
-        printf("\t\t(linux %d)\n", 0);
-        printf("\t\t\t(kernel %s)\n", b_info->kernel);
-        printf("\t\t\t(cmdline %s)\n", b_info->cmdline);
-        printf("\t\t\t(ramdisk %s)\n", b_info->ramdisk);
-        printf("\t\t\t(e820_host %s)\n",
+        fprintf(fh, "\t\t(linux %d)\n", 0);
+        fprintf(fh, "\t\t\t(kernel %s)\n", b_info->kernel);
+        fprintf(fh, "\t\t\t(cmdline %s)\n", b_info->cmdline);
+        fprintf(fh, "\t\t\t(ramdisk %s)\n", b_info->ramdisk);
+        fprintf(fh, "\t\t\t(e820_host %s)\n",
                libxl_defbool_to_string(b_info->u.pv.e820_host));
-        printf("\t\t)\n");
+        fprintf(fh, "\t\t)\n");
         break;
     default:
         fprintf(stderr, "Unknown domain type %d\n", c_info->type);
         exit(1);
     }
-    printf("\t)\n");
+    fprintf(fh, "\t)\n");
 
     for (i = 0; i < d_config->num_disks; i++) {
-        printf("\t(device\n");
-        printf("\t\t(tap\n");
-        printf("\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
-        printf("\t\t\t(frontend_domid %d)\n", domid);
-        printf("\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
-        printf("\t\t\t(phystype %d)\n", d_config->disks[i].backend);
-        printf("\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
-        printf("\t\t\t(unpluggable %d)\n", d_config->disks[i].removable);
-        printf("\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
-        printf("\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
-        printf("\t\t)\n");
-        printf("\t)\n");
+        fprintf(fh, "\t(device\n");
+        fprintf(fh, "\t\t(tap\n");
+        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
+        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
+        fprintf(fh, "\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
+        fprintf(fh, "\t\t\t(phystype %d)\n", d_config->disks[i].backend);
+        fprintf(fh, "\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
+        fprintf(fh, "\t\t\t(unpluggable %d)\n", d_config->disks[i].removable);
+        fprintf(fh, "\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
+        fprintf(fh, "\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
+        fprintf(fh, "\t\t)\n");
+        fprintf(fh, "\t)\n");
     }
 
     for (i = 0; i < d_config->num_nics; i++) {
-        printf("\t(device\n");
-        printf("\t\t(vif\n");
+        fprintf(fh, "\t(device\n");
+        fprintf(fh, "\t\t(vif\n");
         if (d_config->nics[i].ifname)
-            printf("\t\t\t(vifname %s)\n", d_config->nics[i].ifname);
-        printf("\t\t\t(backend_domid %d)\n", d_config->nics[i].backend_domid);
-        printf("\t\t\t(frontend_domid %d)\n", domid);
-        printf("\t\t\t(devid %d)\n", d_config->nics[i].devid);
-        printf("\t\t\t(mtu %d)\n", d_config->nics[i].mtu);
-        printf("\t\t\t(model %s)\n", d_config->nics[i].model);
-        printf("\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n",
+            fprintf(fh, "\t\t\t(vifname %s)\n", d_config->nics[i].ifname);
+        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->nics[i].backend_domid);
+        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
+        fprintf(fh, "\t\t\t(devid %d)\n", d_config->nics[i].devid);
+        fprintf(fh, "\t\t\t(mtu %d)\n", d_config->nics[i].mtu);
+        fprintf(fh, "\t\t\t(model %s)\n", d_config->nics[i].model);
+        fprintf(fh, "\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n",
                d_config->nics[i].mac[0], d_config->nics[i].mac[1],
                d_config->nics[i].mac[2], d_config->nics[i].mac[3],
                d_config->nics[i].mac[4], d_config->nics[i].mac[5]);
-        printf("\t\t)\n");
-        printf("\t)\n");
+        fprintf(fh, "\t\t)\n");
+        fprintf(fh, "\t)\n");
     }
 
     for (i = 0; i < d_config->num_pcidevs; i++) {
-        printf("\t(device\n");
-        printf("\t\t(pci\n");
-        printf("\t\t\t(pci dev %04x:%02x:%02x.%01x@%02x)\n",
+        fprintf(fh, "\t(device\n");
+        fprintf(fh, "\t\t(pci\n");
+        fprintf(fh, "\t\t\t(pci dev %04x:%02x:%02x.%01x@%02x)\n",
                d_config->pcidevs[i].domain, d_config->pcidevs[i].bus,
                d_config->pcidevs[i].dev, d_config->pcidevs[i].func,
                d_config->pcidevs[i].vdevfn);
-        printf("\t\t\t(opts msitranslate %d power_mgmt %d)\n",
+        fprintf(fh, "\t\t\t(opts msitranslate %d power_mgmt %d)\n",
                d_config->pcidevs[i].msitranslate,
                d_config->pcidevs[i].power_mgmt);
-        printf("\t\t)\n");
-        printf("\t)\n");
+        fprintf(fh, "\t\t)\n");
+        fprintf(fh, "\t)\n");
     }
 
     for (i = 0; i < d_config->num_vfbs; i++) {
-        printf("\t(device\n");
-        printf("\t\t(vfb\n");
-        printf("\t\t\t(backend_domid %d)\n", d_config->vfbs[i].backend_domid);
-        printf("\t\t\t(frontend_domid %d)\n", domid);
-        printf("\t\t\t(devid %d)\n", d_config->vfbs[i].devid);
-        printf("\t\t\t(vnc %s)\n",
+        fprintf(fh, "\t(device\n");
+        fprintf(fh, "\t\t(vfb\n");
+        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->vfbs[i].backend_domid);
+        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
+        fprintf(fh, "\t\t\t(devid %d)\n", d_config->vfbs[i].devid);
+        fprintf(fh, "\t\t\t(vnc %s)\n",
                libxl_defbool_to_string(d_config->vfbs[i].vnc.enable));
-        printf("\t\t\t(vnclisten %s)\n", d_config->vfbs[i].vnc.listen);
-        printf("\t\t\t(vncdisplay %d)\n", d_config->vfbs[i].vnc.display);
-        printf("\t\t\t(vncunused %s)\n",
+        fprintf(fh, "\t\t\t(vnclisten %s)\n", d_config->vfbs[i].vnc.listen);
+        fprintf(fh, "\t\t\t(vncdisplay %d)\n", d_config->vfbs[i].vnc.display);
+        fprintf(fh, "\t\t\t(vncunused %s)\n",
                libxl_defbool_to_string(d_config->vfbs[i].vnc.findunused));
-        printf("\t\t\t(keymap %s)\n", d_config->vfbs[i].keymap);
-        printf("\t\t\t(sdl %s)\n",
+        fprintf(fh, "\t\t\t(keymap %s)\n", d_config->vfbs[i].keymap);
+        fprintf(fh, "\t\t\t(sdl %s)\n",
                libxl_defbool_to_string(d_config->vfbs[i].sdl.enable));
-        printf("\t\t\t(opengl %s)\n",
+        fprintf(fh, "\t\t\t(opengl %s)\n",
                libxl_defbool_to_string(d_config->vfbs[i].sdl.opengl));
-        printf("\t\t\t(display %s)\n", d_config->vfbs[i].sdl.display);
-        printf("\t\t\t(xauthority %s)\n", d_config->vfbs[i].sdl.xauthority);
-        printf("\t\t)\n");
-        printf("\t)\n");
+        fprintf(fh, "\t\t\t(display %s)\n", d_config->vfbs[i].sdl.display);
+        fprintf(fh, "\t\t\t(xauthority %s)\n", d_config->vfbs[i].sdl.xauthority);
+        fprintf(fh, "\t\t)\n");
+        fprintf(fh, "\t)\n");
     }
-    printf(")\n");
+    fprintf(fh, ")\n");
 }
 
 
--- xen-4.5.0-rc1/tools/libxl/xl.h.orig	2014-10-24 15:22:40.000000000 +0100
+++ xen-4.5.0-rc1/tools/libxl/xl.h	2014-11-26 22:30:58.416394082 +0000
@@ -186,7 +186,7 @@
 };
 extern enum output_format default_output_format;
 
-extern void printf_info_sexp(int domid, libxl_domain_config *d_config);
+extern void printf_info_sexp(int domid, libxl_domain_config *d_config, FILE *fh);
 
 #define XL_GLOBAL_CONFIG XEN_CONFIG_DIR "/xl.conf"
 #define XL_LOCK_FILE XEN_LOCK_DIR "/xl"

[-- Attachment #3: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] fix migration failure with xl migrate --debug
  2014-11-28  8:32   ` M A Young
@ 2014-11-28 11:49     ` Ian Campbell
  2014-11-28 11:52       ` Ian Jackson
  0 siblings, 1 reply; 7+ messages in thread
From: Ian Campbell @ 2014-11-28 11:49 UTC (permalink / raw)
  To: M A Young, Konrad Rzeszutek Wilk
  Cc: Wei Liu, Stefano Stabellini, Ian Jackson, Andrew Cooper,
	xen-devel

On Fri, 2014-11-28 at 08:32 +0000, M A Young wrote:
> On Fri, 28 Nov 2014, Ian Campbell wrote:
> 
> > On Fri, 2014-11-28 at 00:28 +0000, M A Young wrote:
> >> Migrations with xl migrate --debug will fail because debugging information
> >> from the receiving process is written to the stdout channel. This channel
> >> is also used for status messages so the migration will fail as the sending
> >> process receives an unexpected message. This patch moves the debugging
> >> information to the stderr channel.
> >>
> >> Version 2 moves some output back to stdout that was accidentally moved
> >> to stderr in the first version.
> >>
> >> Signed-off-by: Michael Young <m.a.young@durham.ac.uk>
> >
> > I think you've forgotten the attachment.
> 
> Yes, I did. Here it is.

Acked-by: Ian Campbell <ian.campbell@citrix.com>

It's pretty big but a large chunk is pretty mechanical. Were you
intending this for 4.5? (Konrad CCd).

> Use stderr for debugging messages for xl migrate --debug as stdout is used
> for status messages.
> 
> --- xen-4.5.0-rc1/tools/libxl/xl_cmdimpl.c.orig 2014-10-24 15:22:40.000000000 +0100
> +++ xen-4.5.0-rc1/tools/libxl/xl_cmdimpl.c      2014-11-26 22:41:41.697043321 +0000
> @@ -380,10 +380,10 @@
>  }
>  static void printf_info(enum output_format output_format,
>                          int domid,
> -                        libxl_domain_config *d_config)
> +                        libxl_domain_config *d_config, FILE *fh)
>  {
>      if (output_format == OUTPUT_FORMAT_SXP)
> -        return printf_info_sexp(domid, d_config);
> +        return printf_info_sexp(domid, d_config, fh);
>  
>      const char *buf;
>      libxl_yajl_length len = 0;
> @@ -404,7 +404,7 @@
>      if (s != yajl_gen_status_ok)
>          goto out;
>  
> -    puts(buf);
> +    fputs(buf, fh);
>  
>  out:
>      yajl_gen_free(hand);
> @@ -413,7 +413,13 @@
>          fprintf(stderr,
>                  "unable to format domain config as JSON (YAJL:%d)\n", s);
>  
> -    if (ferror(stdout) || fflush(stdout)) { perror("stdout"); exit(-1); }
> +    if (ferror(fh) || fflush(fh)) {
> +        if (fh == stdout)
> +            perror("stdout");
> +        else
> +            perror("stderr");
> +        exit(-1);
> +    }
>  }
>  
>  static int do_daemonize(char *name)
> @@ -2423,7 +2429,7 @@
>      }
>  
>      if (!dom_info->quiet)
> -        printf("Parsing config from %s\n", config_source);
> +        fprintf(stderr, "Parsing config from %s\n", config_source);
>  
>      if (config_in_json) {
>          libxl_domain_config_from_json(ctx, &d_config,
> @@ -2451,7 +2457,7 @@
>      }
>  
>      if (debug || dom_info->dryrun)
> -        printf_info(default_output_format, -1, &d_config);
> +        printf_info(default_output_format, -1, &d_config, stderr);
>  
>      ret = 0;
>      if (dom_info->dryrun)
> @@ -3403,7 +3409,7 @@
>          if (default_output_format == OUTPUT_FORMAT_JSON)
>              s = printf_info_one_json(hand, info[i].domid, &d_config);
>          else
> -            printf_info_sexp(info[i].domid, &d_config);
> +            printf_info_sexp(info[i].domid, &d_config, stdout);
>          libxl_domain_config_dispose(&d_config);
>          if (s != yajl_gen_status_ok)
>              goto out;
> @@ -4725,7 +4731,7 @@
>      parse_config_data(filename, config_data, config_len, &d_config);
>  
>      if (debug || dryrun_only)
> -        printf_info(default_output_format, -1, &d_config);
> +        printf_info(default_output_format, -1, &d_config, stdout);
>  
>      if (!dryrun_only) {
>          fprintf(stderr, "setting dom%d configuration\n", domid);
> --- xen-4.5.0-rc1/tools/libxl/xl_sxp.c.orig     2014-10-24 15:22:40.000000000 +0100
> +++ xen-4.5.0-rc1/tools/libxl/xl_sxp.c  2014-11-26 22:30:58.416394082 +0000
> @@ -30,7 +30,7 @@
>  /* In general you should not add new output to this function since it
>   * is intended only for legacy use.
>   */
> -void printf_info_sexp(int domid, libxl_domain_config *d_config)
> +void printf_info_sexp(int domid, libxl_domain_config *d_config, FILE *fh)
>  {
>      int i;
>      libxl_dominfo info;
> @@ -38,195 +38,195 @@
>      libxl_domain_create_info *c_info = &d_config->c_info;
>      libxl_domain_build_info *b_info = &d_config->b_info;
>  
> -    printf("(domain\n\t(domid %d)\n", domid);
> -    printf("\t(create_info)\n");
> -    printf("\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
> -    printf("\t(hap %s)\n", libxl_defbool_to_string(c_info->hap));
> -    printf("\t(oos %s)\n", libxl_defbool_to_string(c_info->oos));
> -    printf("\t(ssidref %d)\n", c_info->ssidref);
> -    printf("\t(name %s)\n", c_info->name);
> +    fprintf(fh, "(domain\n\t(domid %d)\n", domid);
> +    fprintf(fh, "\t(create_info)\n");
> +    fprintf(fh, "\t(hvm %d)\n", c_info->type == LIBXL_DOMAIN_TYPE_HVM);
> +    fprintf(fh, "\t(hap %s)\n", libxl_defbool_to_string(c_info->hap));
> +    fprintf(fh, "\t(oos %s)\n", libxl_defbool_to_string(c_info->oos));
> +    fprintf(fh, "\t(ssidref %d)\n", c_info->ssidref);
> +    fprintf(fh, "\t(name %s)\n", c_info->name);
>  
>      /* retrieve the UUID from dominfo, since it is probably generated
>       * during parsing and thus does not match the real one
>       */
>      if (libxl_domain_info(ctx, &info, domid) == 0) {
> -        printf("\t(uuid " LIBXL_UUID_FMT ")\n", LIBXL_UUID_BYTES(info.uuid));
> +        fprintf(fh, "\t(uuid " LIBXL_UUID_FMT ")\n", LIBXL_UUID_BYTES(info.uuid));
>      } else {
> -        printf("\t(uuid <unknown>)\n");
> +        fprintf(fh, "\t(uuid <unknown>)\n");
>      }
>      if (c_info->pool_name)
> -        printf("\t(cpupool %s)\n", c_info->pool_name);
> +        fprintf(fh, "\t(cpupool %s)\n", c_info->pool_name);
>      if (c_info->xsdata)
> -        printf("\t(xsdata contains data)\n");
> +        fprintf(fh, "\t(xsdata contains data)\n");
>      else
> -        printf("\t(xsdata (null))\n");
> +        fprintf(fh, "\t(xsdata (null))\n");
>      if (c_info->platformdata)
> -        printf("\t(platformdata contains data)\n");
> +        fprintf(fh, "\t(platformdata contains data)\n");
>      else
> -        printf("\t(platformdata (null))\n");
> +        fprintf(fh, "\t(platformdata (null))\n");
>  
>  
> -    printf("\t(build_info)\n");
> -    printf("\t(max_vcpus %d)\n", b_info->max_vcpus);
> -    printf("\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
> -    printf("\t(max_memkb %"PRId64")\n", b_info->max_memkb);
> -    printf("\t(target_memkb %"PRId64")\n", b_info->target_memkb);
> -    printf("\t(nomigrate %s)\n",
> +    fprintf(fh, "\t(build_info)\n");
> +    fprintf(fh, "\t(max_vcpus %d)\n", b_info->max_vcpus);
> +    fprintf(fh, "\t(tsc_mode %s)\n", libxl_tsc_mode_to_string(b_info->tsc_mode));
> +    fprintf(fh, "\t(max_memkb %"PRId64")\n", b_info->max_memkb);
> +    fprintf(fh, "\t(target_memkb %"PRId64")\n", b_info->target_memkb);
> +    fprintf(fh, "\t(nomigrate %s)\n",
>             libxl_defbool_to_string(b_info->disable_migrate));
>  
>      if (c_info->type == LIBXL_DOMAIN_TYPE_PV && b_info->u.pv.bootloader) {
> -        printf("\t(bootloader %s)\n", b_info->u.pv.bootloader);
> +        fprintf(fh, "\t(bootloader %s)\n", b_info->u.pv.bootloader);
>          if (b_info->u.pv.bootloader_args) {
> -            printf("\t(bootloader_args");
> +            fprintf(fh, "\t(bootloader_args");
>              for (i=0; b_info->u.pv.bootloader_args[i]; i++)
> -                printf(" %s", b_info->u.pv.bootloader_args[i]);
> -            printf(")\n");
> +                fprintf(fh, " %s", b_info->u.pv.bootloader_args[i]);
> +            fprintf(fh, ")\n");
>          }
>      }
>  
> -    printf("\t(image\n");
> +    fprintf(fh, "\t(image\n");
>      switch (c_info->type) {
>      case LIBXL_DOMAIN_TYPE_HVM:
> -        printf("\t\t(hvm\n");
> -        printf("\t\t\t(firmware %s)\n", b_info->u.hvm.firmware);
> -        printf("\t\t\t(video_memkb %"PRId64")\n", b_info->video_memkb);
> -        printf("\t\t\t(shadow_memkb %"PRId64")\n", b_info->shadow_memkb);
> -        printf("\t\t\t(pae %s)\n", libxl_defbool_to_string(b_info->u.hvm.pae));
> -        printf("\t\t\t(apic %s)\n",
> +        fprintf(fh, "\t\t(hvm\n");
> +        fprintf(fh, "\t\t\t(firmware %s)\n", b_info->u.hvm.firmware);
> +        fprintf(fh, "\t\t\t(video_memkb %"PRId64")\n", b_info->video_memkb);
> +        fprintf(fh, "\t\t\t(shadow_memkb %"PRId64")\n", b_info->shadow_memkb);
> +        fprintf(fh, "\t\t\t(pae %s)\n", libxl_defbool_to_string(b_info->u.hvm.pae));
> +        fprintf(fh, "\t\t\t(apic %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.apic));
> -        printf("\t\t\t(acpi %s)\n",
> +        fprintf(fh, "\t\t\t(acpi %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.acpi));
> -        printf("\t\t\t(nx %s)\n", libxl_defbool_to_string(b_info->u.hvm.nx));
> -        printf("\t\t\t(viridian %s)\n",
> +        fprintf(fh, "\t\t\t(nx %s)\n", libxl_defbool_to_string(b_info->u.hvm.nx));
> +        fprintf(fh, "\t\t\t(viridian %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.viridian));
> -        printf("\t\t\t(hpet %s)\n",
> +        fprintf(fh, "\t\t\t(hpet %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.hpet));
> -        printf("\t\t\t(vpt_align %s)\n",
> +        fprintf(fh, "\t\t\t(vpt_align %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.vpt_align));
> -        printf("\t\t\t(timer_mode %s)\n",
> +        fprintf(fh, "\t\t\t(timer_mode %s)\n",
>                 libxl_timer_mode_to_string(b_info->u.hvm.timer_mode));
> -        printf("\t\t\t(nestedhvm %s)\n",
> +        fprintf(fh, "\t\t\t(nestedhvm %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.nested_hvm));
> -        printf("\t\t\t(stdvga %s)\n", b_info->u.hvm.vga.kind ==
> +        fprintf(fh, "\t\t\t(stdvga %s)\n", b_info->u.hvm.vga.kind ==
>                                        LIBXL_VGA_INTERFACE_TYPE_STD ?
>                                        "True" : "False");
> -        printf("\t\t\t(vnc %s)\n",
> +        fprintf(fh, "\t\t\t(vnc %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.vnc.enable));
> -        printf("\t\t\t(vnclisten %s)\n", b_info->u.hvm.vnc.listen);
> -        printf("\t\t\t(vncdisplay %d)\n", b_info->u.hvm.vnc.display);
> -        printf("\t\t\t(vncunused %s)\n",
> +        fprintf(fh, "\t\t\t(vnclisten %s)\n", b_info->u.hvm.vnc.listen);
> +        fprintf(fh, "\t\t\t(vncdisplay %d)\n", b_info->u.hvm.vnc.display);
> +        fprintf(fh, "\t\t\t(vncunused %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.vnc.findunused));
> -        printf("\t\t\t(keymap %s)\n", b_info->u.hvm.keymap);
> -        printf("\t\t\t(sdl %s)\n",
> +        fprintf(fh, "\t\t\t(keymap %s)\n", b_info->u.hvm.keymap);
> +        fprintf(fh, "\t\t\t(sdl %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.sdl.enable));
> -        printf("\t\t\t(opengl %s)\n",
> +        fprintf(fh, "\t\t\t(opengl %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.sdl.opengl));
> -        printf("\t\t\t(nographic %s)\n",
> +        fprintf(fh, "\t\t\t(nographic %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.nographic));
> -        printf("\t\t\t(spice %s)\n",
> +        fprintf(fh, "\t\t\t(spice %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.spice.enable));
> -        printf("\t\t\t(spiceport %d)\n", b_info->u.hvm.spice.port);
> -        printf("\t\t\t(spicetls_port %d)\n", b_info->u.hvm.spice.tls_port);
> -        printf("\t\t\t(spicehost %s)\n", b_info->u.hvm.spice.host);
> -        printf("\t\t\t(spicedisable_ticketing %s)\n",
> +        fprintf(fh, "\t\t\t(spiceport %d)\n", b_info->u.hvm.spice.port);
> +        fprintf(fh, "\t\t\t(spicetls_port %d)\n", b_info->u.hvm.spice.tls_port);
> +        fprintf(fh, "\t\t\t(spicehost %s)\n", b_info->u.hvm.spice.host);
> +        fprintf(fh, "\t\t\t(spicedisable_ticketing %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.spice.disable_ticketing));
> -        printf("\t\t\t(spiceagent_mouse %s)\n",
> +        fprintf(fh, "\t\t\t(spiceagent_mouse %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.spice.agent_mouse));
>  
> -        printf("\t\t\t(device_model %s)\n", b_info->device_model ? : "default");
> -        printf("\t\t\t(gfx_passthru %s)\n",
> +        fprintf(fh, "\t\t\t(device_model %s)\n", b_info->device_model ? : "default");
> +        fprintf(fh, "\t\t\t(gfx_passthru %s)\n",
>                 libxl_defbool_to_string(b_info->u.hvm.gfx_passthru));
> -        printf("\t\t\t(serial %s)\n", b_info->u.hvm.serial);
> -        printf("\t\t\t(boot %s)\n", b_info->u.hvm.boot);
> -        printf("\t\t\t(usb %s)\n", libxl_defbool_to_string(b_info->u.hvm.usb));
> -        printf("\t\t\t(usbdevice %s)\n", b_info->u.hvm.usbdevice);
> -        printf("\t\t)\n");
> +        fprintf(fh, "\t\t\t(serial %s)\n", b_info->u.hvm.serial);
> +        fprintf(fh, "\t\t\t(boot %s)\n", b_info->u.hvm.boot);
> +        fprintf(fh, "\t\t\t(usb %s)\n", libxl_defbool_to_string(b_info->u.hvm.usb));
> +        fprintf(fh, "\t\t\t(usbdevice %s)\n", b_info->u.hvm.usbdevice);
> +        fprintf(fh, "\t\t)\n");
>          break;
>      case LIBXL_DOMAIN_TYPE_PV:
> -        printf("\t\t(linux %d)\n", 0);
> -        printf("\t\t\t(kernel %s)\n", b_info->kernel);
> -        printf("\t\t\t(cmdline %s)\n", b_info->cmdline);
> -        printf("\t\t\t(ramdisk %s)\n", b_info->ramdisk);
> -        printf("\t\t\t(e820_host %s)\n",
> +        fprintf(fh, "\t\t(linux %d)\n", 0);
> +        fprintf(fh, "\t\t\t(kernel %s)\n", b_info->kernel);
> +        fprintf(fh, "\t\t\t(cmdline %s)\n", b_info->cmdline);
> +        fprintf(fh, "\t\t\t(ramdisk %s)\n", b_info->ramdisk);
> +        fprintf(fh, "\t\t\t(e820_host %s)\n",
>                 libxl_defbool_to_string(b_info->u.pv.e820_host));
> -        printf("\t\t)\n");
> +        fprintf(fh, "\t\t)\n");
>          break;
>      default:
>          fprintf(stderr, "Unknown domain type %d\n", c_info->type);
>          exit(1);
>      }
> -    printf("\t)\n");
> +    fprintf(fh, "\t)\n");
>  
>      for (i = 0; i < d_config->num_disks; i++) {
> -        printf("\t(device\n");
> -        printf("\t\t(tap\n");
> -        printf("\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
> -        printf("\t\t\t(frontend_domid %d)\n", domid);
> -        printf("\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
> -        printf("\t\t\t(phystype %d)\n", d_config->disks[i].backend);
> -        printf("\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
> -        printf("\t\t\t(unpluggable %d)\n", d_config->disks[i].removable);
> -        printf("\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
> -        printf("\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
> -        printf("\t\t)\n");
> -        printf("\t)\n");
> +        fprintf(fh, "\t(device\n");
> +        fprintf(fh, "\t\t(tap\n");
> +        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->disks[i].backend_domid);
> +        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
> +        fprintf(fh, "\t\t\t(physpath %s)\n", d_config->disks[i].pdev_path);
> +        fprintf(fh, "\t\t\t(phystype %d)\n", d_config->disks[i].backend);
> +        fprintf(fh, "\t\t\t(virtpath %s)\n", d_config->disks[i].vdev);
> +        fprintf(fh, "\t\t\t(unpluggable %d)\n", d_config->disks[i].removable);
> +        fprintf(fh, "\t\t\t(readwrite %d)\n", d_config->disks[i].readwrite);
> +        fprintf(fh, "\t\t\t(is_cdrom %d)\n", d_config->disks[i].is_cdrom);
> +        fprintf(fh, "\t\t)\n");
> +        fprintf(fh, "\t)\n");
>      }
>  
>      for (i = 0; i < d_config->num_nics; i++) {
> -        printf("\t(device\n");
> -        printf("\t\t(vif\n");
> +        fprintf(fh, "\t(device\n");
> +        fprintf(fh, "\t\t(vif\n");
>          if (d_config->nics[i].ifname)
> -            printf("\t\t\t(vifname %s)\n", d_config->nics[i].ifname);
> -        printf("\t\t\t(backend_domid %d)\n", d_config->nics[i].backend_domid);
> -        printf("\t\t\t(frontend_domid %d)\n", domid);
> -        printf("\t\t\t(devid %d)\n", d_config->nics[i].devid);
> -        printf("\t\t\t(mtu %d)\n", d_config->nics[i].mtu);
> -        printf("\t\t\t(model %s)\n", d_config->nics[i].model);
> -        printf("\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n",
> +            fprintf(fh, "\t\t\t(vifname %s)\n", d_config->nics[i].ifname);
> +        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->nics[i].backend_domid);
> +        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
> +        fprintf(fh, "\t\t\t(devid %d)\n", d_config->nics[i].devid);
> +        fprintf(fh, "\t\t\t(mtu %d)\n", d_config->nics[i].mtu);
> +        fprintf(fh, "\t\t\t(model %s)\n", d_config->nics[i].model);
> +        fprintf(fh, "\t\t\t(mac %02x%02x%02x%02x%02x%02x)\n",
>                 d_config->nics[i].mac[0], d_config->nics[i].mac[1],
>                 d_config->nics[i].mac[2], d_config->nics[i].mac[3],
>                 d_config->nics[i].mac[4], d_config->nics[i].mac[5]);
> -        printf("\t\t)\n");
> -        printf("\t)\n");
> +        fprintf(fh, "\t\t)\n");
> +        fprintf(fh, "\t)\n");
>      }
>  
>      for (i = 0; i < d_config->num_pcidevs; i++) {
> -        printf("\t(device\n");
> -        printf("\t\t(pci\n");
> -        printf("\t\t\t(pci dev %04x:%02x:%02x.%01x@%02x)\n",
> +        fprintf(fh, "\t(device\n");
> +        fprintf(fh, "\t\t(pci\n");
> +        fprintf(fh, "\t\t\t(pci dev %04x:%02x:%02x.%01x@%02x)\n",
>                 d_config->pcidevs[i].domain, d_config->pcidevs[i].bus,
>                 d_config->pcidevs[i].dev, d_config->pcidevs[i].func,
>                 d_config->pcidevs[i].vdevfn);
> -        printf("\t\t\t(opts msitranslate %d power_mgmt %d)\n",
> +        fprintf(fh, "\t\t\t(opts msitranslate %d power_mgmt %d)\n",
>                 d_config->pcidevs[i].msitranslate,
>                 d_config->pcidevs[i].power_mgmt);
> -        printf("\t\t)\n");
> -        printf("\t)\n");
> +        fprintf(fh, "\t\t)\n");
> +        fprintf(fh, "\t)\n");
>      }
>  
>      for (i = 0; i < d_config->num_vfbs; i++) {
> -        printf("\t(device\n");
> -        printf("\t\t(vfb\n");
> -        printf("\t\t\t(backend_domid %d)\n", d_config->vfbs[i].backend_domid);
> -        printf("\t\t\t(frontend_domid %d)\n", domid);
> -        printf("\t\t\t(devid %d)\n", d_config->vfbs[i].devid);
> -        printf("\t\t\t(vnc %s)\n",
> +        fprintf(fh, "\t(device\n");
> +        fprintf(fh, "\t\t(vfb\n");
> +        fprintf(fh, "\t\t\t(backend_domid %d)\n", d_config->vfbs[i].backend_domid);
> +        fprintf(fh, "\t\t\t(frontend_domid %d)\n", domid);
> +        fprintf(fh, "\t\t\t(devid %d)\n", d_config->vfbs[i].devid);
> +        fprintf(fh, "\t\t\t(vnc %s)\n",
>                 libxl_defbool_to_string(d_config->vfbs[i].vnc.enable));
> -        printf("\t\t\t(vnclisten %s)\n", d_config->vfbs[i].vnc.listen);
> -        printf("\t\t\t(vncdisplay %d)\n", d_config->vfbs[i].vnc.display);
> -        printf("\t\t\t(vncunused %s)\n",
> +        fprintf(fh, "\t\t\t(vnclisten %s)\n", d_config->vfbs[i].vnc.listen);
> +        fprintf(fh, "\t\t\t(vncdisplay %d)\n", d_config->vfbs[i].vnc.display);
> +        fprintf(fh, "\t\t\t(vncunused %s)\n",
>                 libxl_defbool_to_string(d_config->vfbs[i].vnc.findunused));
> -        printf("\t\t\t(keymap %s)\n", d_config->vfbs[i].keymap);
> -        printf("\t\t\t(sdl %s)\n",
> +        fprintf(fh, "\t\t\t(keymap %s)\n", d_config->vfbs[i].keymap);
> +        fprintf(fh, "\t\t\t(sdl %s)\n",
>                 libxl_defbool_to_string(d_config->vfbs[i].sdl.enable));
> -        printf("\t\t\t(opengl %s)\n",
> +        fprintf(fh, "\t\t\t(opengl %s)\n",
>                 libxl_defbool_to_string(d_config->vfbs[i].sdl.opengl));
> -        printf("\t\t\t(display %s)\n", d_config->vfbs[i].sdl.display);
> -        printf("\t\t\t(xauthority %s)\n", d_config->vfbs[i].sdl.xauthority);
> -        printf("\t\t)\n");
> -        printf("\t)\n");
> +        fprintf(fh, "\t\t\t(display %s)\n", d_config->vfbs[i].sdl.display);
> +        fprintf(fh, "\t\t\t(xauthority %s)\n", d_config->vfbs[i].sdl.xauthority);
> +        fprintf(fh, "\t\t)\n");
> +        fprintf(fh, "\t)\n");
>      }
> -    printf(")\n");
> +    fprintf(fh, ")\n");
>  }
>  
>  
> --- xen-4.5.0-rc1/tools/libxl/xl.h.orig 2014-10-24 15:22:40.000000000 +0100
> +++ xen-4.5.0-rc1/tools/libxl/xl.h      2014-11-26 22:30:58.416394082 +0000
> @@ -186,7 +186,7 @@
>  };
>  extern enum output_format default_output_format;
>  
> -extern void printf_info_sexp(int domid, libxl_domain_config *d_config);
> +extern void printf_info_sexp(int domid, libxl_domain_config *d_config, FILE *fh);
>  
>  #define XL_GLOBAL_CONFIG XEN_CONFIG_DIR "/xl.conf"
>  #define XL_LOCK_FILE XEN_LOCK_DIR "/xl"

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] fix migration failure with xl migrate --debug
  2014-11-28 11:49     ` Ian Campbell
@ 2014-11-28 11:52       ` Ian Jackson
  2014-12-01 20:25         ` Konrad Rzeszutek Wilk
  0 siblings, 1 reply; 7+ messages in thread
From: Ian Jackson @ 2014-11-28 11:52 UTC (permalink / raw)
  To: Ian Campbell
  Cc: Wei Liu, Andrew Cooper, Stefano Stabellini, Ian Jackson,
	xen-devel, M A Young

Ian Campbell writes ("Re: [PATCH v2] fix migration failure with xl migrate --debug"):
> Acked-by: Ian Campbell <ian.campbell@citrix.com>

Thanks for reviewing it :-).

> It's pretty big but a large chunk is pretty mechanical. Were you
> intending this for 4.5? (Konrad CCd).

I think (based on reading the thread but not the code) that this ought
to be in 4.5.

Ian.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] fix migration failure with xl migrate --debug
  2014-11-28 11:52       ` Ian Jackson
@ 2014-12-01 20:25         ` Konrad Rzeszutek Wilk
  2014-12-02 15:36           ` Ian Campbell
  0 siblings, 1 reply; 7+ messages in thread
From: Konrad Rzeszutek Wilk @ 2014-12-01 20:25 UTC (permalink / raw)
  To: Ian Jackson
  Cc: Wei Liu, Ian Campbell, Stefano Stabellini, Andrew Cooper,
	xen-devel, M A Young

On Fri, Nov 28, 2014 at 11:52:26AM +0000, Ian Jackson wrote:
> Ian Campbell writes ("Re: [PATCH v2] fix migration failure with xl migrate --debug"):
> > Acked-by: Ian Campbell <ian.campbell@citrix.com>
> 
> Thanks for reviewing it :-).
> 
> > It's pretty big but a large chunk is pretty mechanical. Were you
> > intending this for 4.5? (Konrad CCd).
> 
> I think (based on reading the thread but not the code) that this ought
> to be in 4.5.

Correct.

Release-Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>


> 
> Ian.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH v2] fix migration failure with xl migrate --debug
  2014-12-01 20:25         ` Konrad Rzeszutek Wilk
@ 2014-12-02 15:36           ` Ian Campbell
  0 siblings, 0 replies; 7+ messages in thread
From: Ian Campbell @ 2014-12-02 15:36 UTC (permalink / raw)
  To: Konrad Rzeszutek Wilk
  Cc: Wei Liu, Stefano Stabellini, Andrew Cooper, Ian Jackson,
	xen-devel, M A Young

On Mon, 2014-12-01 at 15:25 -0500, Konrad Rzeszutek Wilk wrote:
> On Fri, Nov 28, 2014 at 11:52:26AM +0000, Ian Jackson wrote:
> > Ian Campbell writes ("Re: [PATCH v2] fix migration failure with xl migrate --debug"):
> > > Acked-by: Ian Campbell <ian.campbell@citrix.com>
> > 
> > Thanks for reviewing it :-).
> > 
> > > It's pretty big but a large chunk is pretty mechanical. Were you
> > > intending this for 4.5? (Konrad CCd).
> > 
> > I think (based on reading the thread but not the code) that this ought
> > to be in 4.5.
> 
> Correct.
> 
> Release-Acked-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

Applied. thanks.

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2014-12-02 15:36 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-11-28  0:28 [PATCH v2] fix migration failure with xl migrate --debug M A Young
2014-11-28  8:27 ` Ian Campbell
2014-11-28  8:32   ` M A Young
2014-11-28 11:49     ` Ian Campbell
2014-11-28 11:52       ` Ian Jackson
2014-12-01 20:25         ` Konrad Rzeszutek Wilk
2014-12-02 15:36           ` Ian Campbell

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.