diff mbox

[2/2] chardev: fix "info chardev" output

Message ID 1369722844-24345-3-git-send-email-kraxel@redhat.com
State New
Headers show

Commit Message

Gerd Hoffmann May 28, 2013, 6:34 a.m. UTC
Fill unset CharDriverState->filename with the backend name, so
'info chardev' will return at least the chardev type.  Don't
touch it in case the chardev init function filled it already,
like the socket+pty chardevs do for example.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 qemu-char.c |    3 +++
 1 file changed, 3 insertions(+)

Comments

Gerd Hoffmann May 28, 2013, 9:57 a.m. UTC | #1
On 05/28/13 08:34, Gerd Hoffmann wrote:
> Fill unset CharDriverState->filename with the backend name, so
> 'info chardev' will return at least the chardev type.  Don't
> touch it in case the chardev init function filled it already,
> like the socket+pty chardevs do for example.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  qemu-char.c |    3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/qemu-char.c b/qemu-char.c
> index f825294..d04b429 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -3801,6 +3801,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
>          chr->label = g_strdup(id);
>          chr->avail_connections =
>              (backend->kind == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
> +        if (!chr->filename) {
> +            chr->filename = g_strdup(ChardevBackendKind_lookup[backend->kind]);
> +        }
>          QTAILQ_INSERT_TAIL(&chardevs, chr, next);
>          return ret;
>      } else {
> 

this one is a stable candidate, cc'ing qemu-stable

cheers,
  Gerd
Eric Blake May 31, 2013, 12:36 p.m. UTC | #2
On 05/28/2013 12:34 AM, Gerd Hoffmann wrote:
> Fill unset CharDriverState->filename with the backend name, so
> 'info chardev' will return at least the chardev type.  Don't
> touch it in case the chardev init function filled it already,
> like the socket+pty chardevs do for example.
> 
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
> ---
>  qemu-char.c |    3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/qemu-char.c b/qemu-char.c
> index f825294..d04b429 100644
> --- a/qemu-char.c
> +++ b/qemu-char.c
> @@ -3801,6 +3801,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
>          chr->label = g_strdup(id);
>          chr->avail_connections =
>              (backend->kind == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
> +        if (!chr->filename) {
> +            chr->filename = g_strdup(ChardevBackendKind_lookup[backend->kind]);
> +        }
>          QTAILQ_INSERT_TAIL(&chardevs, chr, next);
>          return ret;
>      } else {
> 

Peter was telling me on IRC that this patch is still broken with regards
to libvirt; I've cc'd him to provide more details...
Peter Krempa May 31, 2013, 12:45 p.m. UTC | #3
On 05/31/13 14:36, Eric Blake wrote:
> On 05/28/2013 12:34 AM, Gerd Hoffmann wrote:
>> Fill unset CharDriverState->filename with the backend name, so
>> 'info chardev' will return at least the chardev type.  Don't
>> touch it in case the chardev init function filled it already,
>> like the socket+pty chardevs do for example.
>>
>> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
>> ---
>>   qemu-char.c |    3 +++
>>   1 file changed, 3 insertions(+)
>>
>> diff --git a/qemu-char.c b/qemu-char.c
>> index f825294..d04b429 100644
>> --- a/qemu-char.c
>> +++ b/qemu-char.c
>> @@ -3801,6 +3801,9 @@ ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
>>           chr->label = g_strdup(id);
>>           chr->avail_connections =
>>               (backend->kind == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
>> +        if (!chr->filename) {
>> +            chr->filename = g_strdup(ChardevBackendKind_lookup[backend->kind]);
>> +        }
>>           QTAILQ_INSERT_TAIL(&chardevs, chr, next);
>>           return ret;
>>       } else {
>>
> 
> Peter was telling me on IRC that this patch is still broken with regards
> to libvirt; I've cc'd him to provide more details...
> 

Without this patch the returned message for "query-chardev" is:

{
    "return": [
        {
            "filename": "pty:/dev/pts/8",
            "label": "charserial0"
        },
        {
            "filename": "unix:/var/lib/libvirt/qemu/qemu-git.monitor,server",
            "label": "charmonitor"
        }
    ],
    "id": "libvirt-2"
}


this patch changes it to:

{
    "return": [
        {
            "filename": "pty",
            "label": "charserial0"
        },
        {
            "filename": "unix:/var/lib/libvirt/qemu/qemu-git.monitor,server",
            "label": "charmonitor"
        }
    ],
    "id": "libvirt-2"
}

It's apparent that some code being executed after the code in this patch
fills the actual pty path that was allocated. With it pre-allocated the
code ignores it. Libvirt is using the output to gather names of the pty
so that they can be used to connect to the console.

Peter
Gerd Hoffmann May 31, 2013, 1:21 p.m. UTC | #4
Hi,

> Without this patch the returned message for "query-chardev" is:
> 
> {
>     "return": [
>         {
>             "filename": "pty:/dev/pts/8",
>             "label": "charserial0"
>         },
>         {
>             "filename": "unix:/var/lib/libvirt/qemu/qemu-git.monitor,server",
>             "label": "charmonitor"
>         }
>     ],
>     "id": "libvirt-2"
> }
> 
> 
> this patch changes it to:
> 
> {
>     "return": [
>         {
>             "filename": "pty",
>             "label": "charserial0"
>         },
>         {
>             "filename": "unix:/var/lib/libvirt/qemu/qemu-git.monitor,server",
>             "label": "charmonitor"
>         }
>     ],
>     "id": "libvirt-2"
> }

Please double-check.  Current master
(87d23f78aa79b72da022afda358bbc8a8509ca70 to be exact) works just fine
for me.  libvirt works, including a serial line redirected to pty, and
'info chardev' looks sane too.

cheers,
  Gerd
Peter Krempa May 31, 2013, 1:30 p.m. UTC | #5
On 05/31/13 15:21, Gerd Hoffmann wrote:
>    Hi,
>

Hi,

>
> Please double-check.  Current master
> (87d23f78aa79b72da022afda358bbc8a8509ca70 to be exact) works just fine
> for me.  libvirt works, including a serial line redirected to pty, and
> 'info chardev' looks sane too.

sorry for the fuzz. :/ Upstream is really working, One of the tested 
binaries was actually predating the pull of your fix and I forgot to 
verify that as It was built yesterday.


Again sorry for the noise, it's working now.

Peter

>
> cheers,
>    Gerd
>
diff mbox

Patch

diff --git a/qemu-char.c b/qemu-char.c
index f825294..d04b429 100644
--- a/qemu-char.c
+++ b/qemu-char.c
@@ -3801,6 +3801,9 @@  ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend,
         chr->label = g_strdup(id);
         chr->avail_connections =
             (backend->kind == CHARDEV_BACKEND_KIND_MUX) ? MAX_MUX : 1;
+        if (!chr->filename) {
+            chr->filename = g_strdup(ChardevBackendKind_lookup[backend->kind]);
+        }
         QTAILQ_INSERT_TAIL(&chardevs, chr, next);
         return ret;
     } else {