Re: [PATCH] libxl: use serial device for console when targetType is serial

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]