On 06/22/2016 02:03 PM, Cole Robinson wrote: > On 06/22/2016 03:45 PM, Jim Fehlig wrote: >> When domXML contains only <console type='pty'> and no corresponding >> <serial>, the console is "stolen" [1] and used as the first <serial> >> device. When this "stolen" console is accessed from the libxl driver >> (in libxlConsoleCallback and libxlDomainOpenConsole), check if the >> targetType is VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL, and use the >> "stolen" device in def->serials[0] instead. Prior to this change, >> creating a domain with input XML containing only a <console> device >> and subsequently attempting to access its console with >> 'virsh console' would fail >> >> error: internal error: character device <null> is not using a PTY >> >> [1] See comments associated with virDomainDefAddConsoleCompat() in >> $LIBVIRT-SRC/src/conf/domain_conf.c: >> >> Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx> >> --- >> src/libxl/libxl_domain.c | 8 ++++++-- >> src/libxl/libxl_driver.c | 5 ++++- >> 2 files changed, 10 insertions(+), 3 deletions(-) >> >> diff --git a/src/libxl/libxl_domain.c b/src/libxl/libxl_domain.c >> index 221af87..6bcb4d9 100644 >> --- a/src/libxl/libxl_domain.c >> +++ b/src/libxl/libxl_domain.c >> @@ -964,13 +964,17 @@ libxlConsoleCallback(libxl_ctx *ctx, libxl_event *ev, void *for_callback) >> virObjectLock(vm); >> for (i = 0; i < vm->def->nconsoles; i++) { >> virDomainChrDefPtr chr = vm->def->consoles[i]; >> - if (chr && chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) { >> + if (i == 0 && >> + chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) >> + chr = vm->def->serials[0]; >> + >> + if (chr->source.type == VIR_DOMAIN_CHR_TYPE_PTY) { >> libxl_console_type console_type; >> char *console = NULL; >> int ret; >> >> console_type = >> - (chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL ? >> + (chr->deviceType == VIR_DOMAIN_CHR_DEVICE_TYPE_SERIAL ? >> LIBXL_CONSOLE_TYPE_SERIAL : LIBXL_CONSOLE_TYPE_PV); >> ret = libxl_console_get_tty(ctx, ev->domid, >> chr->target.port, console_type, >> diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c >> index c8c1f07..3189f1c 100644 >> --- a/src/libxl/libxl_driver.c >> +++ b/src/libxl/libxl_driver.c >> @@ -4443,8 +4443,11 @@ libxlDomainOpenConsole(virDomainPtr dom, >> >> priv = vm->privateData; >> >> - if (vm->def->nconsoles) >> + if (vm->def->nconsoles) { >> chr = vm->def->consoles[0]; >> + if (chr->targetType == VIR_DOMAIN_CHR_CONSOLE_TARGET_TYPE_SERIAL) >> + chr = vm->def->serials[0]; >> + } >> >> if (!chr) { >> virReportError(VIR_ERR_INTERNAL_ERROR, >> > ACK (if my ACK is sufficient for functional libxl changes :) ) Thanks, I've pushed this. You recognized the convention and provided half the patch, so I think it is sufficient :). Regards, Jim -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list