[libvirt] [PATCH] qemu: Adapt to new log format

Michal Privoznik mprivozn at redhat.com
Sun Dec 30 10:26:56 UTC 2012


On 30.12.2012 10:25, Osier Yang wrote:
> On 2012年12月29日 17:09, Michal Privoznik wrote:
>> Since 586502189edf9fd0f89a83de96717a2ea826fdb0 qemu commit, the log
>> lines reporting chardev's path has changed from:
>>
>> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor
>> pty
>> char device redirected to /dev/pts/5
>> char device redirected to /dev/pts/6
>> char device redirected to /dev/pts/7
>>
>> to:
>>
>> $ ./x86_64-softmmu/qemu-system-x86_64 -serial pty -serial pty -monitor
>> pty
>> char device compat_monitor0 redirected to /dev/pts/5
>> char device serial0 redirected to /dev/pts/6
>> char device serial1 redirected to /dev/pts/7
>>
>> However, with current code we are not prepared for such change, which
>> results in us being unable to start any domain.
>> ---
>>   src/qemu/qemu_process.c | 33 +++++++++++++++++++++++++++++----
>>   1 file changed, 29 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
>> index eac6553..29bd082 100644
>> --- a/src/qemu/qemu_process.c
>> +++ b/src/qemu/qemu_process.c
>> @@ -1431,22 +1431,43 @@ cleanup:
>>    *
>>    * char device redirected to /dev/pts/3
>>    *
>> + * However, since 1.4 the line we are looking for has changed to:
>> + *
>> + * char device<alias>  redirected to /some/path
>> + *
>>    * Returns -1 for error, 0 success, 1 continue reading
>>    */
>>   static int
>>   qemuProcessExtractTTYPath(const char *haystack,
>>                             size_t *offset,
>> +                          const char *alias,
>>                             char **path)
>>   {
>> -    static const char needle[] = "char device redirected to";
>> -    char *tmp, *dev;
>> +    static const char *needle[] = {"char device", "redirected to"};
>> +    const char *tmp, *dev;
>>
>>       VIR_FREE(*path);
>>       /* First look for our magic string */
>> -    if (!(tmp = strstr(haystack + *offset, needle))) {
>> +    if (!(tmp = strstr(haystack + *offset, needle[0])))
>>           return 1;
>> +
>> +    tmp += strlen(needle[0]);
>> +    virSkipSpaces(&tmp);
>> +
>> +    if (STRPREFIX(tmp, "char")) {
> 
> I don't see why it's the new style with "char" here with regard
> to the new output string like "char device serial1 redirected
> to /dev/pts/7". Should it be below instead?
> 
>        if (!STRPREFIX(tmp, "redirected"))
> or
>        if (STRPREFIX(tmp, alias))
> 

I should have documented that. If you take look at
qemuBuildChrChardevStr() you can see, that all char devices IDs are
constructed as "id=char%s", where %s is substituted device alias. Hence
qemu sees 'charalias0' instead of bare 'alias0'. Therefore we should
check for 'char' prefix.

Michal




More information about the libvir-list mailing list