[PATCH v2 4/7] chardev/char: move filename and be_opened handling to qemu_char_open()

Vladimir Sementsov-Ogievskiy posted 7 patches 1 month ago
Maintainers: "Marc-André Lureau" <marcandre.lureau@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, "Daniel P. Berrangé" <berrange@redhat.com>, Eduardo Habkost <eduardo@habkost.net>
There is a newer version of this series
[PATCH v2 4/7] chardev/char: move filename and be_opened handling to qemu_char_open()
Posted by Vladimir Sementsov-Ogievskiy 1 month ago
Absent filename and necessity to send CHR_EVENT_OPENED are artifacts
of .open(). Handle them in qemu_char_open().

Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
 chardev/char.c | 23 ++++++++++++-----------
 1 file changed, 12 insertions(+), 11 deletions(-)

diff --git a/chardev/char.c b/chardev/char.c
index 64ec60c0f2..6498d53daa 100644
--- a/chardev/char.c
+++ b/chardev/char.c
@@ -247,18 +247,27 @@ int qemu_chr_add_client(Chardev *s, int fd)
 }
 
 static bool qemu_char_open(Chardev *chr, ChardevBackend *backend,
-                           bool *be_opened, Error **errp)
+                           const char *default_filename, Error **errp)
 {
     ERRP_GUARD();
     ChardevClass *cc = CHARDEV_GET_CLASS(chr);
+    bool be_opened = true;
 
     if (cc->open) {
-        cc->open(chr, backend, be_opened, errp);
+        cc->open(chr, backend, &be_opened, errp);
         if (*errp) {
             return false;
         }
     }
 
+    if (!chr->filename) {
+        chr->filename = g_strdup(default_filename);
+    }
+
+    if (be_opened) {
+        qemu_chr_be_event(chr, CHR_EVENT_OPENED);
+    }
+
     return true;
 }
 
@@ -1021,7 +1030,6 @@ static Chardev *chardev_new(const char *id, const char *typename,
     Object *obj;
     Chardev *chr = NULL;
     Error *local_err = NULL;
-    bool be_opened = true;
 
     assert(g_str_has_prefix(typename, "chardev-"));
     assert(id);
@@ -1036,17 +1044,10 @@ static Chardev *chardev_new(const char *id, const char *typename,
         goto fail;
     }
 
-    if (!qemu_char_open(chr, backend, &be_opened, &local_err)) {
+    if (!qemu_char_open(chr, backend, typename + 8, &local_err)) {
         goto fail;
     }
 
-    if (!chr->filename) {
-        chr->filename = g_strdup(typename + 8);
-    }
-    if (be_opened) {
-        qemu_chr_be_event(chr, CHR_EVENT_OPENED);
-    }
-
     return chr;
 
 fail:
-- 
2.48.1
Re: [PATCH v2 4/7] chardev/char: move filename and be_opened handling to qemu_char_open()
Posted by Marc-André Lureau 1 month ago
On Mon, Oct 13, 2025 at 5:40 PM Vladimir Sementsov-Ogievskiy
<vsementsov@yandex-team.ru> wrote:
>
> Absent filename and necessity to send CHR_EVENT_OPENED are artifacts
> of .open(). Handle them in qemu_char_open().
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>

Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>


> ---
>  chardev/char.c | 23 ++++++++++++-----------
>  1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/chardev/char.c b/chardev/char.c
> index 64ec60c0f2..6498d53daa 100644
> --- a/chardev/char.c
> +++ b/chardev/char.c
> @@ -247,18 +247,27 @@ int qemu_chr_add_client(Chardev *s, int fd)
>  }
>
>  static bool qemu_char_open(Chardev *chr, ChardevBackend *backend,
> -                           bool *be_opened, Error **errp)
> +                           const char *default_filename, Error **errp)
>  {
>      ERRP_GUARD();
>      ChardevClass *cc = CHARDEV_GET_CLASS(chr);
> +    bool be_opened = true;
>
>      if (cc->open) {
> -        cc->open(chr, backend, be_opened, errp);
> +        cc->open(chr, backend, &be_opened, errp);
>          if (*errp) {
>              return false;
>          }
>      }
>
> +    if (!chr->filename) {
> +        chr->filename = g_strdup(default_filename);
> +    }
> +
> +    if (be_opened) {
> +        qemu_chr_be_event(chr, CHR_EVENT_OPENED);
> +    }
> +
>      return true;
>  }
>
> @@ -1021,7 +1030,6 @@ static Chardev *chardev_new(const char *id, const char *typename,
>      Object *obj;
>      Chardev *chr = NULL;
>      Error *local_err = NULL;
> -    bool be_opened = true;
>
>      assert(g_str_has_prefix(typename, "chardev-"));
>      assert(id);
> @@ -1036,17 +1044,10 @@ static Chardev *chardev_new(const char *id, const char *typename,
>          goto fail;
>      }
>
> -    if (!qemu_char_open(chr, backend, &be_opened, &local_err)) {
> +    if (!qemu_char_open(chr, backend, typename + 8, &local_err)) {
>          goto fail;
>      }
>
> -    if (!chr->filename) {
> -        chr->filename = g_strdup(typename + 8);
> -    }
> -    if (be_opened) {
> -        qemu_chr_be_event(chr, CHR_EVENT_OPENED);
> -    }
> -
>      return chr;
>
>  fail:
> --
> 2.48.1
>
>


--
Marc-André Lureau