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 10:18 PM, Jim Fehlig wrote:
> 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 :).
Saw this a little late - but it seems that you shot two birds with this single patch.
Since we're now effectively changing the serials as opposed the consoles def (as per
Cole mentioned convention) you also ended up fixing the bug about the source path not
being in the XML. So I am dropping my patch [0] :) Thanks!

Not sure about this, but it appears this patch could be -maint material? IIUC, these
bugs have been here for a fair amount of releases potentially dating back more than
one year.

Joao

[0] https://www.redhat.com/archives/libvir-list/2016-June/msg01312.html

--
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]