[libvirt PATCH 2/2] conf: set the default chr device type to pty

Praveen K Paladugu prapal at linux.microsoft.com
Tue Aug 2 16:01:52 UTC 2022



On 8/1/2022 8:01 AM, Peter Krempa wrote:
> On Fri, Jul 29, 2022 at 20:36:57 +0000, Praveen K Paladugu wrote:
>> explicitly set the chr device type to pty to pass the
>> checks of ch driver.
>> https://gitlab.com/libvirt/libvirt/-/issues/344
> 
> This is not a persuading enough enough commit message ...
> 
>>
>> Signed-off-by: Praveen K Paladugu <prapal at linux.microsoft.com>
>> ---
>>   src/conf/domain_conf.c | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
>> index e85cc1f809..abe9d8ae08 100644
>> --- a/src/conf/domain_conf.c
>> +++ b/src/conf/domain_conf.c
>> @@ -10078,6 +10078,7 @@ virDomainChrSourceDefNew(virDomainXMLOption *xmlopt)
>>   
>>       if (!(def = virObjectNew(virDomainChrSourceDefClass)))
>>           return NULL;
>> +    def->type = VIR_DOMAIN_CHR_TYPE_PTY;
> 
> ... to justify a global change like this.
> 
> Could you please at least clarify which code path is problematic? I see
> e.g. that virDomainChrDefParseXML sets VIR_DOMAIN_CHR_TYPE_PTY as the
> source type if the user doesn't set one.
> 
To summarize the issue, a post parsing step appends a stub console via
virDomainDefAddConsoleCompat to Guest Domain XML. Below is the trace for 
how the stub console is added.
virDomainDefPostParse -> virDomainDefPostParseCommon -> 
virDomainDefAddImplicitDevices -> virDomainDefAddConsoleCompat

The stub console added in virDomainDefAddConsoleCompat is initialized to 
type VIR_DOMAIN_CHR_TYPE_NULL, when a zero_intialized console object is 
created.

Cloud-Hypervisor driver's deviceValidateCallback 
(chValidateDomainDeviceDef) checks that the type of stub console is not 
VIR_DOMAIN_CHR_TYPE_PTY and returns an error.

Because of the above sequence of steps, cloud-hypervisor VMs fail to be 
created with the following error:

$ virsh -c ch:///system create /files/ch-impish.xml
error: Failed to create domain from /nfs/ch-impish.xml
error: internal error: Console can only be enabled for a PTY

> If this is a workaround for the stub console added by default in
> virDomainDefAddConsoleCompat and the cloud hypervisor e.g. doesn't need
> that or it's wrong for it's usage, the modification shoud IMO be limited
> to the cloud hypervisor similarly to what I suggested in the issue.
> 

By running a test Qemu VM, I verified that virDomainDefAddConsoleCompat 
is adding a console of type PTY. By passing below serial device 
configuration for a Qemu VM:

  <serial type='pty'>
     <target port='0'/>
  </serial>

I see the below stub console being added:

$ virsh dumpxml qemu_impish

...
     <serial type='pty'>
       <source path='/dev/pts/1'/>
       <target type='isa-serial' port='0'>
         <model name='isa-serial'/>
       </target>
       <alias name='serial0'/>
     </serial>
     <console type='pty' tty='/dev/pts/1'>
       <source path='/dev/pts/1'/>
       <target type='serial' port='0'/>
       <alias name='serial0'/>
     </console>
...


So, I wanted to check if setting the default chr device to PTY makes sense.


Thinking further, it makes sense to limit the change to "ch" driver 
only. I will send out an updated patch with the suggested change. Hope 
the above details provide enough context on the source of the issue.

> Note that we require commit messages to be self-explanatory without
> refering to e.g. outside discussions.

Thanks, will add all relevant details in the commit message itself, in 
my next revision.

-- 
Regards,
Praveen K Paladugu



More information about the libvir-list mailing list