* [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.