[libvirt] [PATCH] Add support for multiple serial ports to Xen driver

Michal Novotny minovotn at redhat.com
Thu Jan 20 13:39:43 UTC 2011


On 01/20/2011 02:32 PM, Paolo Bonzini wrote:
> On 01/20/2011 12:58 PM, root wrote:
>> +                if ((list->type != VIR_CONF_STRING) || (list->str == 
>> NULL))
>> +                    goto skipport;
>> +
>
> I believe this should do
>
>         xenXMError(VIR_ERR_INTERNAL_ERROR,
>                    _("config value %s was malformed"), name);
>         goto cleanup;
>
> similar to xenXMConfigGetString.
>
>> +                chr->targetType = VIR_DOMAIN_CHR_TARGET_TYPE_SERIAL;
>> +                chr->type = VIR_DOMAIN_CHR_TYPE_PTY;
>> +
>> +                /* Implement device type of serial port when 
>> appropriate */
>> +                if (STRPREFIX(port, "/dev")) {
>> +                    chr->type = VIR_DOMAIN_CHR_TYPE_DEV;
>> +                    chr->target.port = def->nserials;
>> +                    chr->data.file.path = strdup(port);
>> +
>> +                    if (!chr->data.file.path)
>> +                        goto no_memory;
>> +                }
>
> Can you explain what's going on here ("it needs to be this way to fix 
> xyz" is not an explanation; please give the input and output of 
> xenDaemonParseSxprChar).  In particular, these look like preexisting 
> problems handling
>
>    serial = "/dev/ttyS0"
>
> (where the port is not copied to chr->data.file.path).  Is this 
> correct?  If so, please state this explicitly and check that the above 
> works. It seems to me that your patch fixes /dev/ttyS0 in the array 
> case, but not when it is the only serial port.  If this is correct, 
> "chr->data.file.path = strdup(port);" should be moved to 
> xenDaemonParseSxprChar.  In fact there is already code there to do 
> exactly the same strdup for VIR_DOMAIN_CHR_TYPE_PTY.
>
> Even taking the above into consideration, the code is going through 
> some extra hoops (and has a few bugs):
>
> 1) chr->type should already be correct if the port starts with "/dev", 
> but you have just overridden it to VIR_DOMAIN_CHR_TYPE_PTY.
>
> 2) "chr->type = VIR_DOMAIN_CHR_TYPE_PTY" is not necessary.
>
> 3) "chr->target.port = def->nserials;" should be done always, not just 
> when /dev is matched.
>
> In the end the code here should be simply:
>
>                /* Not really necessary (the enum evaluates to 0), but
>                   I prefer to have it for clarity.  */
>                chr->targetType = VIR_DOMAIN_CHR_TARGET_TYPE_SERIAL;
>                chr->target.port = def->nserials;
>
> matching more or less the code you have in the "else" branch below. 
> Anything except the above should go in xenDaemonParseSxprChar.
>
> Also, please add testcases.  There are many cases that should be 
> covered for both XML->sxpr and xm->XML conversion.
>
> I initially thought there was another problem in the code, which is 
> what to do when the <target> subelement is present and ends up 
> defining a third serial port without the first being present.  However 
> I changed my mind since the qemu driver is anyway disregarding the 
> port number as well.  Given this, the patch is already in pretty good 
> shape.
>
> Thanks,
>
> Paolo
>
Well, I'm working on support for serial port configuration as serial = [ 
"/dev/null", "/dev/ttyS0", "/dev/ttyS1" ] to:

1) pass /dev/null to the guest as /dev/ttyS0
2) pass /dev/ttyS0 to the guest as /dev/ttyS1
3) pass /dev/ttyS1 to the guest as /dev/ttyS2

I think this could be good thing to be implemented as well. Also, the 
libvirt XML definition should be:

<serial type='dev'>
<source path='/dev/null'/>
<target port='0'/>
</serial>
<serial type='dev'>
<source path='/dev/ttyS0'/>
<target port='1'/>
</serial>
<serial type='dev'>
<source path='/dev/ttyS1'/>
<target port='2'/>
</serial>

Are you OK with that?

I'm also thinking of omitting the first <serial> block and automatically 
set the path to /dev/null when target.port is not present in the libvirt 
XML definition but it shouldn't be necessary after all. What do you 
think on this one?

Thanks,
Michal

-- 
Michal Novotny<minovotn at redhat.com>, RHCE
Virtualization Team (xen userspace), Red Hat




More information about the libvir-list mailing list