get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2196272/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2196272,
    "url": "http://patchwork.ozlabs.org/api/patches/2196272/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260213094938.4074478-8-marcandre.lureau@redhat.com/",
    "project": {
        "id": 14,
        "url": "http://patchwork.ozlabs.org/api/projects/14/?format=api",
        "name": "QEMU Development",
        "link_name": "qemu-devel",
        "list_id": "qemu-devel.nongnu.org",
        "list_email": "qemu-devel@nongnu.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": "",
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<20260213094938.4074478-8-marcandre.lureau@redhat.com>",
    "list_archive_url": null,
    "date": "2026-02-13T09:49:26",
    "name": "[PULL,v2,07/15] chardev: .chr_open(): add boolean return value",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "43f40aebb6502aee2797bb1f058cf52f8b234db5",
    "submitter": {
        "id": 66774,
        "url": "http://patchwork.ozlabs.org/api/people/66774/?format=api",
        "name": "Marc-André Lureau",
        "email": "marcandre.lureau@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260213094938.4074478-8-marcandre.lureau@redhat.com/mbox/",
    "series": [
        {
            "id": 492070,
            "url": "http://patchwork.ozlabs.org/api/series/492070/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=492070",
            "date": "2026-02-13T09:49:19",
            "name": "[PULL,v2,01/15] char-udp: Fix initial backend open status",
            "version": 2,
            "mbox": "http://patchwork.ozlabs.org/series/492070/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2196272/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2196272/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>",
        "X-Original-To": "incoming@patchwork.ozlabs.org",
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=XVppd7Mx;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)"
        ],
        "Received": [
            "from lists.gnu.org (lists.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fC6s64f5Lz1xpl\n\tfor <incoming@patchwork.ozlabs.org>; Fri, 13 Feb 2026 20:52:10 +1100 (AEDT)",
            "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1vqpor-0007b0-Ug; Fri, 13 Feb 2026 04:50:37 -0500",
            "from eggs.gnu.org ([2001:470:142:3::10])\n by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <marcandre.lureau@redhat.com>)\n id 1vqpoh-000777-O1\n for qemu-devel@nongnu.org; Fri, 13 Feb 2026 04:50:31 -0500",
            "from us-smtp-delivery-124.mimecast.com ([170.10.133.124])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <marcandre.lureau@redhat.com>)\n id 1vqpoY-0007IS-Sl\n for qemu-devel@nongnu.org; Fri, 13 Feb 2026 04:50:25 -0500",
            "from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-416-lSjxDuI5MUSzo8WKgT3dYw-1; Fri,\n 13 Feb 2026 04:50:13 -0500",
            "from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 7593218003F5; Fri, 13 Feb 2026 09:50:07 +0000 (UTC)",
            "from localhost (unknown [10.44.22.41])\n by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id A2ABB30001B9; Fri, 13 Feb 2026 09:50:06 +0000 (UTC)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1770976217;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=EkOuQwE7r/+vSW05dfY0N0e0q7f2IkqD8VkbkpDWQVE=;\n b=XVppd7MxhpuVWlIVBTlGGdn5080P3qAy6/Adly38HdfVZMxLYw45Get7XjqJ1RuWTxx6u2\n Ip07UR0J1vrGawcJdIkC7QFIrsao6QWxAR/okwlFq/o/Ss+xhT71DwNSJFMrLpv2/7mNBH\n E/5qT3Ii/ddYWIyra9PL3c+dx8Qtp4I=",
        "X-MC-Unique": "lSjxDuI5MUSzo8WKgT3dYw-1",
        "X-Mimecast-MFC-AGG-ID": "lSjxDuI5MUSzo8WKgT3dYw_1770976211",
        "From": "marcandre.lureau@redhat.com",
        "To": "qemu-devel@nongnu.org",
        "Cc": "=?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>,\n \"Edgar E. Iglesias\" <edgar.iglesias@gmail.com>, =?utf-8?q?Daniel_P=2E_Berra?=\n\t=?utf-8?q?ng=C3=A9?= <berrange@redhat.com>, Eric Blake <eblake@redhat.com>,\n Markus Armbruster <armbru@redhat.com>, Paul Durrant <paul@xen.org>,\n Anthony PERARD <anthony@xenproject.org>, =?utf-8?q?Philippe_Mathieu-Daud?=\n\t=?utf-8?q?=C3=A9?= <philmd@linaro.org>,\n Eduardo Habkost <eduardo@habkost.net>, Paolo Bonzini <pbonzini@redhat.com>,\n\t=?utf-8?q?Marc-Andr=C3=A9_Lureau?= <marcandre.lureau@redhat.com>,\n Stefano Stabellini <sstabellini@kernel.org>, xen-devel@lists.xenproject.org,\n Samuel Thibault <samuel.thibault@ens-lyon.org>,\n Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>",
        "Subject": "[PULL v2 07/15] chardev: .chr_open(): add boolean return value",
        "Date": "Fri, 13 Feb 2026 10:49:26 +0100",
        "Message-ID": "<20260213094938.4074478-8-marcandre.lureau@redhat.com>",
        "In-Reply-To": "<20260213094938.4074478-1-marcandre.lureau@redhat.com>",
        "References": "<20260213094938.4074478-1-marcandre.lureau@redhat.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-Scanned-By": "MIMEDefang 3.4.1 on 10.30.177.4",
        "Received-SPF": "pass client-ip=170.10.133.124;\n envelope-from=marcandre.lureau@redhat.com;\n helo=us-smtp-delivery-124.mimecast.com",
        "X-Spam_score_int": "-20",
        "X-Spam_score": "-2.1",
        "X-Spam_bar": "--",
        "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001,\n DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=0.001,\n RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001,\n SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no",
        "X-Spam_action": "no action",
        "X-BeenThere": "qemu-devel@nongnu.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "qemu development <qemu-devel.nongnu.org>",
        "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>",
        "List-Post": "<mailto:qemu-devel@nongnu.org>",
        "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>",
        "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>",
        "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org",
        "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org"
    },
    "content": "From: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>\n\nAdd boolean return value to follow common recommendations for functions\nwith errrp in include/qapi/error.h\n\nSigned-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>\nReviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>\nReviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>\nMessage-Id: <20260115144606.233252-7-vsementsov@yandex-team.ru>\n---\n include/chardev/char.h   |  2 +-\n chardev/baum.c           |  5 +++--\n chardev/char-console.c   |  3 ++-\n chardev/char-file.c      | 13 +++++++------\n chardev/char-hub.c       | 11 ++++++-----\n chardev/char-mux.c       |  8 +++++---\n chardev/char-null.c      |  4 ++--\n chardev/char-parallel.c  | 14 ++++++++------\n chardev/char-pipe.c      | 12 +++++++-----\n chardev/char-pty.c       |  9 ++++++---\n chardev/char-ringbuf.c   |  5 +++--\n chardev/char-serial.c    | 15 +++++++++------\n chardev/char-socket.c    | 17 +++++++++--------\n chardev/char-stdio.c     | 11 ++++++-----\n chardev/char-udp.c       |  5 +++--\n chardev/char-win-stdio.c |  7 ++++---\n chardev/msmouse.c        |  3 ++-\n chardev/spice.c          | 12 +++++++-----\n chardev/wctablet.c       |  3 ++-\n gdbstub/system.c         |  3 ++-\n ui/console-vc.c          |  3 ++-\n ui/dbus-chardev.c        |  6 +++---\n ui/gtk.c                 |  5 +++--\n ui/spice-app.c           | 10 ++++++----\n ui/vdagent.c             | 10 +++++-----\n 25 files changed, 113 insertions(+), 83 deletions(-)",
    "diff": "diff --git a/include/chardev/char.h b/include/chardev/char.h\nindex aa42e01b8a3..e1bf97222b8 100644\n--- a/include/chardev/char.h\n+++ b/include/chardev/char.h\n@@ -260,7 +260,7 @@ struct ChardevClass {\n     void (*chr_parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp);\n \n     /* called after construction, open/starts the backend */\n-    void (*chr_open)(Chardev *chr, ChardevBackend *backend, Error **errp);\n+    bool (*chr_open)(Chardev *chr, ChardevBackend *backend, Error **errp);\n \n     /* write buf to the backend */\n     int (*chr_write)(Chardev *s, const uint8_t *buf, int len);\ndiff --git a/chardev/baum.c b/chardev/baum.c\nindex 4b97d630ffb..1219963656b 100644\n--- a/chardev/baum.c\n+++ b/chardev/baum.c\n@@ -642,7 +642,7 @@ static void char_braille_finalize(Object *obj)\n     }\n }\n \n-static void baum_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool baum_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     BaumChardev *baum = BAUM_CHARDEV(chr);\n     brlapi_handle_t *handle;\n@@ -656,7 +656,7 @@ static void baum_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n                    brlapi_strerror(brlapi_error_location()));\n         g_free(handle);\n         baum->brlapi = NULL;\n-        return;\n+        return false;\n     }\n     baum->deferred_init = 0;\n \n@@ -669,6 +669,7 @@ static void baum_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     qemu_set_fd_handler(baum->brlapi_fd, baum_chr_read, NULL, baum);\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n static void char_braille_class_init(ObjectClass *oc, const void *data)\ndiff --git a/chardev/char-console.c b/chardev/char-console.c\nindex 423f0f4cc4e..0739c9c94a3 100644\n--- a/chardev/char-console.c\n+++ b/chardev/char-console.c\n@@ -26,11 +26,12 @@\n #include \"chardev/char-win.h\"\n #include \"qemu/module.h\"\n \n-static void console_chr_open(Chardev *chr, ChardevBackend *backend,\n+static bool console_chr_open(Chardev *chr, ChardevBackend *backend,\n                              Error **errp)\n {\n     win_chr_set_file(chr, GetStdHandle(STD_OUTPUT_HANDLE), true);\n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n static void char_console_class_init(ObjectClass *oc, const void *data)\ndiff --git a/chardev/char-file.c b/chardev/char-file.c\nindex 34ef386abc5..b0dd9d5f870 100644\n--- a/chardev/char-file.c\n+++ b/chardev/char-file.c\n@@ -34,7 +34,7 @@\n #include \"chardev/char-fd.h\"\n #endif\n \n-static void file_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool file_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevFile *file = backend->u.file.data;\n #ifdef _WIN32\n@@ -44,7 +44,7 @@ static void file_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n \n     if (file->in) {\n         error_setg(errp, \"input file not supported\");\n-        return;\n+        return false;\n     }\n \n     if (file->has_append && file->append) {\n@@ -61,7 +61,7 @@ static void file_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n                      FILE_ATTRIBUTE_NORMAL, NULL);\n     if (out == INVALID_HANDLE_VALUE) {\n         error_setg(errp, \"open %s failed\", file->out);\n-        return;\n+        return false;\n     }\n \n     win_chr_set_file(chr, out, false);\n@@ -77,7 +77,7 @@ static void file_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n \n     out = qmp_chardev_open_file_source(file->out, flags, errp);\n     if (out < 0) {\n-        return;\n+        return false;\n     }\n \n     if (file->in) {\n@@ -85,7 +85,7 @@ static void file_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n         in = qmp_chardev_open_file_source(file->in, flags, errp);\n         if (in < 0) {\n             qemu_close(out);\n-            return;\n+            return false;\n         }\n     }\n \n@@ -94,11 +94,12 @@ static void file_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n         if (in >= 0) {\n             qemu_close(in);\n         }\n-        return;\n+        return false;\n     }\n #endif\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n static void file_chr_parse(QemuOpts *opts, ChardevBackend *backend,\ndiff --git a/chardev/char-hub.c b/chardev/char-hub.c\nindex aa6058c2f6f..05cf722b5b0 100644\n--- a/chardev/char-hub.c\n+++ b/chardev/char-hub.c\n@@ -203,7 +203,7 @@ static void hub_chr_update_read_handlers(Chardev *chr)\n     }\n }\n \n-static void hub_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool hub_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevHub *hub = backend->u.hub.data;\n     HubChardev *d = HUB_CHARDEV(chr);\n@@ -213,7 +213,7 @@ static void hub_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n \n     if (list == NULL) {\n         error_setg(errp, \"hub: 'chardevs' list is not defined\");\n-        return;\n+        return false;\n     }\n \n     while (list) {\n@@ -223,17 +223,17 @@ static void hub_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n         if (s == NULL) {\n             error_setg(errp, \"hub: chardev can't be found by id '%s'\",\n                        list->value);\n-            return;\n+            return false;\n         }\n         if (CHARDEV_IS_HUB(s) || CHARDEV_IS_MUX(s)) {\n             error_setg(errp, \"hub: multiplexers and hub devices can't be \"\n                        \"stacked, check chardev '%s', chardev should not \"\n                        \"be a hub device or have 'mux=on' enabled\",\n                        list->value);\n-            return;\n+            return false;\n         }\n         if (!hub_chr_attach_chardev(d, s, errp)) {\n-            return;\n+            return false;\n         }\n         list = list->next;\n     }\n@@ -242,6 +242,7 @@ static void hub_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n      * Closed until an explicit event from backend, so we don't\n      * send CHR_EVENT_OPENED now.\n      */\n+    return true;\n }\n \n static void hub_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\ndiff --git a/chardev/char-mux.c b/chardev/char-mux.c\nindex 7210df431fc..881443d869d 100644\n--- a/chardev/char-mux.c\n+++ b/chardev/char-mux.c\n@@ -361,7 +361,7 @@ void mux_set_focus(Chardev *chr, unsigned int focus)\n     mux_chr_send_event(d, d->focus, CHR_EVENT_MUX_IN);\n }\n \n-static void mux_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool mux_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevMux *mux = backend->u.mux.data;\n     Chardev *drv;\n@@ -370,12 +370,12 @@ static void mux_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     drv = qemu_chr_find(mux->chardev);\n     if (drv == NULL) {\n         error_setg(errp, \"mux: base chardev %s not found\", mux->chardev);\n-        return;\n+        return false;\n     }\n \n     d->focus = -1;\n     if (!qemu_chr_fe_init(&d->chr, drv, errp)) {\n-        return;\n+        return false;\n     }\n \n     /*\n@@ -385,6 +385,8 @@ static void mux_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     if (muxes_opened) {\n         qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n     }\n+\n+    return true;\n }\n \n static void mux_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\ndiff --git a/chardev/char-null.c b/chardev/char-null.c\nindex 900b5febb6c..d5a101178bb 100644\n--- a/chardev/char-null.c\n+++ b/chardev/char-null.c\n@@ -26,9 +26,9 @@\n #include \"chardev/char.h\"\n #include \"qemu/module.h\"\n \n-static void null_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool null_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n-    /* do not send CHR_EVENT_OPENED */\n+    return true;\n }\n \n static void char_null_class_init(ObjectClass *oc, const void *data)\ndiff --git a/chardev/char-parallel.c b/chardev/char-parallel.c\nindex 359efa3c9c8..cbf87e660da 100644\n--- a/chardev/char-parallel.c\n+++ b/chardev/char-parallel.c\n@@ -157,7 +157,7 @@ static int parallel_chr_ioctl(Chardev *chr, int cmd, void *arg)\n     return 0;\n }\n \n-static void parallel_chr_open_fd(Chardev *chr, int fd, Error **errp)\n+static bool parallel_chr_open_fd(Chardev *chr, int fd, Error **errp)\n {\n     ParallelChardev *drv = PARALLEL_CHARDEV(chr);\n \n@@ -165,11 +165,12 @@ static void parallel_chr_open_fd(Chardev *chr, int fd, Error **errp)\n \n     if (ioctl(fd, PPCLAIM) < 0) {\n         error_setg_errno(errp, errno, \"not a parallel port\");\n-        return;\n+        return false;\n     }\n \n     drv->mode = IEEE1284_MODE_COMPAT;\n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n #endif /* __linux__ */\n \n@@ -225,15 +226,16 @@ static int parallel_chr_ioctl(Chardev *chr, int cmd, void *arg)\n     return 0;\n }\n \n-static void parallel_chr_open_fd(Chardev *chr, int fd, Error **errp)\n+static bool parallel_chr_open_fd(Chardev *chr, int fd, Error **errp)\n {\n     ParallelChardev *drv = PARALLEL_CHARDEV(chr);\n     drv->fd = fd;\n+    return true;\n }\n #endif\n \n #ifdef HAVE_CHARDEV_PARALLEL\n-static void parallel_chr_open(Chardev *chr,\n+static bool parallel_chr_open(Chardev *chr,\n                               ChardevBackend *backend,\n                               Error **errp)\n {\n@@ -242,9 +244,9 @@ static void parallel_chr_open(Chardev *chr,\n \n     fd = qmp_chardev_open_file_source(parallel->device, O_RDWR, errp);\n     if (fd < 0) {\n-        return;\n+        return false;\n     }\n-    parallel_chr_open_fd(chr, fd, errp);\n+    return parallel_chr_open_fd(chr, fd, errp);\n }\n \n static void parallel_chr_parse(QemuOpts *opts, ChardevBackend *backend,\ndiff --git a/chardev/char-pipe.c b/chardev/char-pipe.c\nindex 2f26372dfc9..472b3e0801f 100644\n--- a/chardev/char-pipe.c\n+++ b/chardev/char-pipe.c\n@@ -103,21 +103,22 @@ static int win_chr_pipe_init(Chardev *chr, const char *filename,\n     return -1;\n }\n \n-static void pipe_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool pipe_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevHostdev *opts = backend->u.pipe.data;\n     const char *filename = opts->device;\n \n     if (win_chr_pipe_init(chr, filename, errp) < 0) {\n-        return;\n+        return false;\n     }\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n #else\n \n-static void pipe_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool pipe_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevHostdev *opts = backend->u.pipe.data;\n     int fd_in, fd_out;\n@@ -143,7 +144,7 @@ static void pipe_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n         );\n         if (fd_in < 0) {\n             error_setg_file_open(errp, errno, filename);\n-            return;\n+            return false;\n         }\n     }\n \n@@ -152,10 +153,11 @@ static void pipe_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n         if (fd_out != fd_in) {\n             close(fd_out);\n         }\n-        return;\n+        return false;\n     }\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n #endif /* !_WIN32 */\ndiff --git a/chardev/char-pty.c b/chardev/char-pty.c\nindex d4d69a29a95..9e26e97baf5 100644\n--- a/chardev/char-pty.c\n+++ b/chardev/char-pty.c\n@@ -331,7 +331,7 @@ static int qemu_openpty_raw(int *aslave, char *pty_name)\n     return amaster;\n }\n \n-static void pty_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool pty_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     PtyChardev *s;\n     int master_fd, slave_fd;\n@@ -342,13 +342,13 @@ static void pty_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     master_fd = qemu_openpty_raw(&slave_fd, pty_name);\n     if (master_fd < 0) {\n         error_setg_errno(errp, errno, \"Failed to create PTY\");\n-        return;\n+        return false;\n     }\n \n     close(slave_fd);\n     if (!qemu_set_blocking(master_fd, false, errp)) {\n         close(master_fd);\n-        return;\n+        return false;\n     }\n \n     chr->filename = g_strdup_printf(\"pty:%s\", pty_name);\n@@ -368,10 +368,13 @@ static void pty_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n \n         if (res != 0) {\n             error_setg_errno(errp, errno, \"Failed to create PTY symlink\");\n+            return false;\n         } else {\n             s->path = g_strdup(path);\n         }\n     }\n+\n+    return true;\n }\n \n static void pty_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\ndiff --git a/chardev/char-ringbuf.c b/chardev/char-ringbuf.c\nindex 30b17a96d3a..8f998d26a49 100644\n--- a/chardev/char-ringbuf.c\n+++ b/chardev/char-ringbuf.c\n@@ -92,7 +92,7 @@ static void char_ringbuf_finalize(Object *obj)\n     g_free(d->cbuf);\n }\n \n-static void ringbuf_chr_open(Chardev *chr,\n+static bool ringbuf_chr_open(Chardev *chr,\n                              ChardevBackend *backend,\n                              Error **errp)\n {\n@@ -104,7 +104,7 @@ static void ringbuf_chr_open(Chardev *chr,\n     /* The size must be power of 2 */\n     if (d->size & (d->size - 1)) {\n         error_setg(errp, \"size of ringbuf chardev must be power of two\");\n-        return;\n+        return false;\n     }\n \n     d->prod = 0;\n@@ -112,6 +112,7 @@ static void ringbuf_chr_open(Chardev *chr,\n     d->cbuf = g_malloc0(d->size);\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n void qmp_ringbuf_write(const char *device, const char *data,\ndiff --git a/chardev/char-serial.c b/chardev/char-serial.c\nindex 9995f184258..0c73bafc545 100644\n--- a/chardev/char-serial.c\n+++ b/chardev/char-serial.c\n@@ -41,15 +41,17 @@\n \n #ifdef _WIN32\n \n-static void serial_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool serial_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevHostdev *serial = backend->u.serial.data;\n     int ret = win_chr_serial_init(chr, serial->device, errp);\n     if (ret < 0) {\n-        return;\n+        return false;\n     }\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+\n+    return true;\n }\n \n #elif defined(__linux__) || defined(__sun__) || defined(__FreeBSD__)      \\\n@@ -259,7 +261,7 @@ static int serial_chr_ioctl(Chardev *chr, int cmd, void *arg)\n     return 0;\n }\n \n-static void serial_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool serial_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevHostdev *serial = backend->u.serial.data;\n     int fd;\n@@ -267,20 +269,21 @@ static void serial_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     fd = qmp_chardev_open_file_source(serial->device, O_RDWR | O_NONBLOCK,\n                                       errp);\n     if (fd < 0) {\n-        return;\n+        return false;\n     }\n     if (!qemu_set_blocking(fd, false, errp)) {\n         close(fd);\n-        return;\n+        return false;\n     }\n     tty_serial_init(fd, 115200, 'N', 8, 1);\n \n     if (!qemu_chr_open_fd(chr, fd, fd, errp)) {\n         close(fd);\n-        return;\n+        return false;\n     }\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n #endif /* __linux__ || __sun__ */\n \ndiff --git a/chardev/char-socket.c b/chardev/char-socket.c\nindex 2951b2ec9be..908bbdbc124 100644\n--- a/chardev/char-socket.c\n+++ b/chardev/char-socket.c\n@@ -1365,7 +1365,7 @@ static bool qmp_chardev_validate_socket(ChardevSocket *sock,\n }\n \n \n-static void tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     SocketChardev *s = SOCKET_CHARDEV(chr);\n     ChardevSocket *sock = backend->u.socket.data;\n@@ -1390,7 +1390,7 @@ static void tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n         if (!creds) {\n             error_setg(errp, \"No TLS credentials with id '%s'\",\n                        sock->tls_creds);\n-            return;\n+            return false;\n         }\n         s->tls_creds = (QCryptoTLSCreds *)\n             object_dynamic_cast(creds,\n@@ -1398,7 +1398,7 @@ static void tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n         if (!s->tls_creds) {\n             error_setg(errp, \"Object with id '%s' is not TLS credentials\",\n                        sock->tls_creds);\n-            return;\n+            return false;\n         }\n         object_ref(OBJECT(s->tls_creds));\n         if (!qcrypto_tls_creds_check_endpoint(s->tls_creds,\n@@ -1406,7 +1406,7 @@ static void tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n                                           ? QCRYPTO_TLS_CREDS_ENDPOINT_SERVER\n                                           : QCRYPTO_TLS_CREDS_ENDPOINT_CLIENT,\n                                           errp)) {\n-            return;\n+            return false;\n         }\n     }\n     s->tls_authz = g_strdup(sock->tls_authz);\n@@ -1414,7 +1414,7 @@ static void tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     s->addr = addr = socket_address_flatten(sock->addr);\n \n     if (!qmp_chardev_validate_socket(sock, addr, errp)) {\n-        return;\n+        return false;\n     }\n \n     qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_RECONNECTABLE);\n@@ -1431,7 +1431,7 @@ static void tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n      */\n     if (!chr->handover_yank_instance) {\n         if (!yank_register_instance(CHARDEV_YANK_INSTANCE(chr->label), errp)) {\n-            return;\n+            return false;\n         }\n     }\n     s->registered_yank = true;\n@@ -1441,15 +1441,16 @@ static void tcp_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     if (s->is_listen) {\n         if (qmp_chardev_open_socket_server(chr, is_telnet || is_tn3270,\n                                            is_waitconnect, errp) < 0) {\n-            return;\n+            return false;\n         }\n     } else {\n         if (qmp_chardev_open_socket_client(chr, reconnect_ms, errp) < 0) {\n-            return;\n+            return false;\n         }\n     }\n \n     /* be isn't opened until we get a connection */\n+    return true;\n }\n \n static void tcp_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\ndiff --git a/chardev/char-stdio.c b/chardev/char-stdio.c\nindex 534f6ed5658..fe1cbb2d880 100644\n--- a/chardev/char-stdio.c\n+++ b/chardev/char-stdio.c\n@@ -85,19 +85,19 @@ static void term_stdio_handler(int sig)\n     stdio_chr_set_echo(NULL, stdio_echo_state);\n }\n \n-static void stdio_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool stdio_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevStdio *opts = backend->u.stdio.data;\n     struct sigaction act;\n \n     if (is_daemonized()) {\n         error_setg(errp, \"cannot use stdio with -daemonize\");\n-        return;\n+        return false;\n     }\n \n     if (stdio_in_use) {\n         error_setg(errp, \"cannot use stdio by multiple character devices\");\n-        return;\n+        return false;\n     }\n \n     stdio_in_use = true;\n@@ -105,11 +105,11 @@ static void stdio_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     old_fd1_flags = fcntl(1, F_GETFL);\n     tcgetattr(0, &oldtty);\n     if (!qemu_set_blocking(0, false, errp)) {\n-        return;\n+        return false;\n     }\n \n     if (!qemu_chr_open_fd(chr, 0, 1, errp)) {\n-        return;\n+        return false;\n     }\n \n     atexit(term_exit);\n@@ -122,6 +122,7 @@ static void stdio_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     stdio_chr_set_echo(chr, false);\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n #endif\n \ndiff --git a/chardev/char-udp.c b/chardev/char-udp.c\nindex 4c81c95e656..423000832ff 100644\n--- a/chardev/char-udp.c\n+++ b/chardev/char-udp.c\n@@ -188,7 +188,7 @@ static void udp_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\n     }\n }\n \n-static void upd_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool upd_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevUdp *udp = backend->u.udp.data;\n     SocketAddress *local_addr = socket_address_flatten(udp->local);\n@@ -203,7 +203,7 @@ static void upd_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     qapi_free_SocketAddress(remote_addr);\n     if (ret < 0) {\n         object_unref(OBJECT(sioc));\n-        return;\n+        return false;\n     }\n \n     name = g_strdup_printf(\"chardev-udp-%s\", chr->label);\n@@ -212,6 +212,7 @@ static void upd_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n \n     s->ioc = QIO_CHANNEL(sioc);\n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n static void char_udp_class_init(ObjectClass *oc, const void *data)\ndiff --git a/chardev/char-win-stdio.c b/chardev/char-win-stdio.c\nindex 0535960ff1b..bb9c195a8b1 100644\n--- a/chardev/char-win-stdio.c\n+++ b/chardev/char-win-stdio.c\n@@ -142,7 +142,7 @@ static void win_stiod_chr_set_echo(Chardev *chr, bool echo)\n     }\n }\n \n-static void win_stdio_chr_open(Chardev *chr,\n+static bool win_stdio_chr_open(Chardev *chr,\n                                ChardevBackend *backend,\n                                Error **errp)\n {\n@@ -155,7 +155,7 @@ static void win_stdio_chr_open(Chardev *chr,\n     stdio->hStdIn = GetStdHandle(STD_INPUT_HANDLE);\n     if (stdio->hStdIn == INVALID_HANDLE_VALUE) {\n         error_setg(errp, \"cannot open stdio: invalid handle\");\n-        return;\n+        return false;\n     }\n \n     is_console = GetConsoleMode(stdio->hStdIn, &dwMode) != 0;\n@@ -208,7 +208,7 @@ static void win_stdio_chr_open(Chardev *chr,\n     win_stiod_chr_set_echo(chr, false);\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n-    return;\n+    return true;\n \n err3:\n     qemu_del_wait_object(stdio->hInputReadyEvent, NULL, NULL);\n@@ -217,6 +217,7 @@ err2:\n     CloseHandle(stdio->hInputDoneEvent);\n err1:\n     qemu_del_wait_object(stdio->hStdIn, NULL, NULL);\n+    return false;\n }\n \n static void char_win_stdio_finalize(Object *obj)\ndiff --git a/chardev/msmouse.c b/chardev/msmouse.c\nindex 9dc04e3b3ec..365f04546e9 100644\n--- a/chardev/msmouse.c\n+++ b/chardev/msmouse.c\n@@ -253,7 +253,7 @@ static void char_msmouse_finalize(Object *obj)\n     fifo8_destroy(&mouse->outbuf);\n }\n \n-static void msmouse_chr_open(Chardev *chr,\n+static bool msmouse_chr_open(Chardev *chr,\n                              ChardevBackend *backend,\n                              Error **errp)\n {\n@@ -265,6 +265,7 @@ static void msmouse_chr_open(Chardev *chr,\n     fifo8_create(&mouse->outbuf, MSMOUSE_BUF_SZ);\n \n     /* Never send CHR_EVENT_OPENED */\n+    return true;\n }\n \n static void char_msmouse_class_init(ObjectClass *oc, const void *data)\ndiff --git a/chardev/spice.c b/chardev/spice.c\nindex f5b1f585eb1..ad97d98ac6b 100644\n--- a/chardev/spice.c\n+++ b/chardev/spice.c\n@@ -251,7 +251,7 @@ static void chr_open(Chardev *chr, const char *subtype)\n     s->sin.subtype = g_strdup(subtype);\n }\n \n-static void spice_vmc_chr_open(Chardev *chr, ChardevBackend *backend,\n+static bool spice_vmc_chr_open(Chardev *chr, ChardevBackend *backend,\n                                Error **errp)\n {\n     ChardevSpiceChannel *spicevmc = backend->u.spicevmc.data;\n@@ -272,13 +272,14 @@ static void spice_vmc_chr_open(Chardev *chr, ChardevBackend *backend,\n                           subtypes);\n \n         g_free(subtypes);\n-        return;\n+        return false;\n     }\n \n     chr_open(chr, type);\n+    return true;\n }\n \n-static void spice_port_chr_open(Chardev *chr, ChardevBackend *backend,\n+static bool spice_port_chr_open(Chardev *chr, ChardevBackend *backend,\n                                 Error **errp)\n {\n     ChardevSpicePort *spiceport = backend->u.spiceport.data;\n@@ -287,12 +288,12 @@ static void spice_port_chr_open(Chardev *chr, ChardevBackend *backend,\n \n     if (name == NULL) {\n         error_setg(errp, \"missing name parameter\");\n-        return;\n+        return false;\n     }\n \n     if (!using_spice) {\n         error_setg(errp, \"spice not enabled\");\n-        return;\n+        return false;\n     }\n \n     chr_open(chr, \"port\");\n@@ -301,6 +302,7 @@ static void spice_port_chr_open(Chardev *chr, ChardevBackend *backend,\n     s->sin.portname = g_strdup(name);\n \n     vmc_register_interface(s);\n+    return true;\n }\n \n static void spice_vmc_chr_parse(QemuOpts *opts, ChardevBackend *backend,\ndiff --git a/chardev/wctablet.c b/chardev/wctablet.c\nindex 65b2ceb58c9..214d5ca2e28 100644\n--- a/chardev/wctablet.c\n+++ b/chardev/wctablet.c\n@@ -324,7 +324,7 @@ static void wctablet_chr_finalize(Object *obj)\n     }\n }\n \n-static void wctablet_chr_open(Chardev *chr,\n+static bool wctablet_chr_open(Chardev *chr,\n                               ChardevBackend *backend,\n                               Error **errp)\n {\n@@ -339,6 +339,7 @@ static void wctablet_chr_open(Chardev *chr,\n                                              &wctablet_handler);\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n static void wctablet_chr_class_init(ObjectClass *oc, const void *data)\ndiff --git a/gdbstub/system.c b/gdbstub/system.c\nindex 982857f314a..e86c5870abc 100644\n--- a/gdbstub/system.c\n+++ b/gdbstub/system.c\n@@ -233,9 +233,10 @@ static int gdb_chr_write(Chardev *chr, const uint8_t *buf, int len)\n     return len;\n }\n \n-static void gdb_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool gdb_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     /* Never send CHR_EVENT_OPENED */\n+    return true;\n }\n \n static void char_gdb_class_init(ObjectClass *oc, const void *data)\ndiff --git a/ui/console-vc.c b/ui/console-vc.c\nindex 4c8ea4c1485..f22806fed79 100644\n--- a/ui/console-vc.c\n+++ b/ui/console-vc.c\n@@ -1093,7 +1093,7 @@ void qemu_text_console_update_size(QemuTextConsole *c)\n     dpy_text_resize(QEMU_CONSOLE(c), c->width, c->height);\n }\n \n-static void vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ChardevVC *vc = backend->u.vc.data;\n     VCChardev *drv = VC_CHARDEV(chr);\n@@ -1142,6 +1142,7 @@ static void vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     }\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n static void vc_chr_parse(QemuOpts *opts, ChardevBackend *backend, Error **errp)\ndiff --git a/ui/dbus-chardev.c b/ui/dbus-chardev.c\nindex 3e471f84cd8..9442b475517 100644\n--- a/ui/dbus-chardev.c\n+++ b/ui/dbus-chardev.c\n@@ -176,7 +176,7 @@ dbus_chr_send_break(\n     return DBUS_METHOD_INVOCATION_HANDLED;\n }\n \n-static void dbus_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool dbus_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     ERRP_GUARD();\n \n@@ -206,9 +206,9 @@ static void dbus_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     CHARDEV_CLASS(object_class_by_name(TYPE_CHARDEV_SOCKET))->chr_parse(\n         opts, be, errp);\n     if (*errp) {\n-        return;\n+        return false;\n     }\n-    CHARDEV_CLASS(object_class_by_name(TYPE_CHARDEV_SOCKET))->chr_open(\n+    return CHARDEV_CLASS(object_class_by_name(TYPE_CHARDEV_SOCKET))->chr_open(\n         chr, be, errp);\n }\n \ndiff --git a/ui/gtk.c b/ui/gtk.c\nindex 44b2b868ec9..9ebe7e8df0d 100644\n--- a/ui/gtk.c\n+++ b/ui/gtk.c\n@@ -1963,11 +1963,11 @@ static void gd_vc_chr_set_echo(Chardev *chr, bool echo)\n \n static int nb_vcs;\n static Chardev *vcs[MAX_VCS];\n-static void gd_vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool gd_vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     if (nb_vcs == MAX_VCS) {\n         error_setg(errp, \"Maximum number of consoles reached\");\n-        return;\n+        return false;\n     }\n \n     vcs[nb_vcs++] = chr;\n@@ -1976,6 +1976,7 @@ static void gd_vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n      * console/chardev init sometimes completes elsewhere in a 2nd\n      * stage, so defer OPENED events until they are fully initialized\n      */\n+    return true;\n }\n \n static void char_gd_vc_class_init(ObjectClass *oc, const void *data)\ndiff --git a/ui/spice-app.c b/ui/spice-app.c\nindex 7ac9ae4e78d..9e55f273715 100644\n--- a/ui/spice-app.c\n+++ b/ui/spice-app.c\n@@ -49,7 +49,7 @@ struct VCChardev {\n \n struct VCChardevClass {\n     ChardevClass parent;\n-    void (*parent_open)(Chardev *chr, ChardevBackend *backend, Error **errp);\n+    bool (*parent_init)(Chardev *chr, ChardevBackend *backend, Error **errp);\n };\n \n #define TYPE_CHARDEV_VC \"chardev-vc\"\n@@ -66,11 +66,12 @@ chr_spice_backend_new(void)\n     return be;\n }\n \n-static void vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n+static bool vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n {\n     VCChardevClass *vc = CHARDEV_VC_GET_CLASS(chr);\n     ChardevBackend *be;\n     const char *fqdn = NULL;\n+    bool ok;\n \n     if (strstart(chr->label, \"serial\", NULL)) {\n         fqdn = \"org.qemu.console.serial.0\";\n@@ -83,8 +84,9 @@ static void vc_chr_open(Chardev *chr, ChardevBackend *backend, Error **errp)\n     be = chr_spice_backend_new();\n     be->u.spiceport.data->fqdn = fqdn ?\n         g_strdup(fqdn) : g_strdup_printf(\"org.qemu.console.%s\", chr->label);\n-    vc->parent_open(chr, be, errp);\n+    ok = vc->parent_init(chr, be, errp);\n     qapi_free_ChardevBackend(be);\n+    return ok;\n }\n \n static void vc_chr_set_echo(Chardev *chr, bool echo)\n@@ -102,7 +104,7 @@ static void char_vc_class_init(ObjectClass *oc, const void *data)\n     VCChardevClass *vc = CHARDEV_VC_CLASS(oc);\n     ChardevClass *cc = CHARDEV_CLASS(oc);\n \n-    vc->parent_open = cc->chr_open;\n+    vc->parent_init = cc->chr_open;\n \n     cc->chr_parse = vc_chr_parse;\n     cc->chr_open = vc_chr_open;\ndiff --git a/ui/vdagent.c b/ui/vdagent.c\nindex 644e9acaaeb..7ff0861f3e9 100644\n--- a/ui/vdagent.c\n+++ b/ui/vdagent.c\n@@ -660,8 +660,7 @@ static void vdagent_chr_recv_clipboard(VDAgentChardev *vd, VDAgentMessage *msg)\n /* ------------------------------------------------------------------ */\n /* chardev backend                                                    */\n \n-static void vdagent_chr_open(Chardev *chr,\n-                             ChardevBackend *backend,\n+static bool vdagent_chr_open(Chardev *chr, ChardevBackend *backend,\n                              Error **errp)\n {\n     VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(chr);\n@@ -673,7 +672,7 @@ static void vdagent_chr_open(Chardev *chr,\n      * so we have to byteswap everything on BE hosts.\n      */\n     error_setg(errp, \"vdagent is not supported on bigendian hosts\");\n-    return;\n+    return false;\n #endif\n \n     vd->mouse = VDAGENT_MOUSE_DEFAULT;\n@@ -692,6 +691,7 @@ static void vdagent_chr_open(Chardev *chr,\n     }\n \n     qemu_chr_be_event(chr, CHR_EVENT_OPENED);\n+    return true;\n }\n \n static void vdagent_clipboard_peer_register(VDAgentChardev *vd)\n@@ -1074,7 +1074,7 @@ static const VMStateDescription vmstate_vdagent = {\n     }\n };\n \n-static void vdagent_chr_init(Object *obj)\n+static void vdagent_chr_instance_init(Object *obj)\n {\n     VDAgentChardev *vd = QEMU_VDAGENT_CHARDEV(obj);\n \n@@ -1097,7 +1097,7 @@ static const TypeInfo vdagent_chr_type_info = {\n     .name = TYPE_CHARDEV_QEMU_VDAGENT,\n     .parent = TYPE_CHARDEV,\n     .instance_size = sizeof(VDAgentChardev),\n-    .instance_init = vdagent_chr_init,\n+    .instance_init = vdagent_chr_instance_init,\n     .instance_finalize = vdagent_chr_fini,\n     .class_init = vdagent_chr_class_init,\n };\n",
    "prefixes": [
        "PULL",
        "v2",
        "07/15"
    ]
}