From nobody Fri Nov 14 18:23:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760362794; cv=none; d=zohomail.com; s=zohoarc; b=Ry2WUZqhrNzxV4ibFC0WwO/6VcXQgjzBdppt7Fv024LhDugLfLY5CIsXGG0lRpCg8RkZpsyaFXlK3wVgASwHai61dojAQvK5eLbxS7d+5B8GsyPFiynAcjoxCukyh79NK3wjlg3sV8iw575yqV2gtEBxLwL74njOf5eceN7uMZM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760362794; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gi71/i1kMj9CDrqX7l6YlJyZvdocIF4+vUzWbXXfboI=; b=Fr3rshj+P63u277Jm1G0qyvfmcVN17JKaJEuItBADYslQJ7sXB6DuF9oIK/9XkTjjyM+MJV+oa8wWM90DaYWNGnbSTX4PeHyUa7TXfvYhGtyWTlO5FL9BueRd6Oor6PO0P9cLaUG2w4nlyRMF0WIeEPIyTlZPVg8kouzTWV5Sjw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760362794191731.3045606772556; Mon, 13 Oct 2025 06:39:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8IlP-0006gC-Tb; Mon, 13 Oct 2025 09:38:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlK-0006dr-88 for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:54 -0400 Received: from forwardcorp1d.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlB-0006a6-OO for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:53 -0400 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id B3B298085D; Mon, 13 Oct 2025 16:38:40 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a50::1:2a]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id ccOm1D2F0Cg0-z6BeDE3J; Mon, 13 Oct 2025 16:38:40 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760362720; bh=gi71/i1kMj9CDrqX7l6YlJyZvdocIF4+vUzWbXXfboI=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=KAESDY+hdQwKTSEwji8RCh1b0jskWgKOzfCRUMsiXLQF5NJ6UAh401bKZapNVKQtE rG4MHkId3SvFTLeg5W7x5kPJPay7G0u4DUe7LLIpvoPO9BlsexKVhH5/2gwHUfmNX7 AX1syKXHZKCYjNNSnfM+O4BBaAug/zSMMnodpfCk= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: marcandre.lureau@redhat.com Cc: pbonzini@redhat.com, berrange@redhat.com, eduardo@habkost.net, qemu-devel@nongnu.org, vsementsov@yandex-team.ru, raphael@enfabrica.net, armbru@redhat.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru Subject: [PATCH v2 1/7] chardev/char-socket: simplify reconnect-ms handling Date: Mon, 13 Oct 2025 16:38:30 +0300 Message-ID: <20251013133836.852018-2-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251013133836.852018-1-vsementsov@yandex-team.ru> References: <20251013133836.852018-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760362795974154100 Content-Type: text/plain; charset="utf-8" We pass it to qmp_chardev_open_socket_client() only to write to s->reconnect_time_ms. Let's simply set this field earlier, together with other options. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-socket.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index 62852e3caf..f3bc6290d2 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1274,18 +1274,16 @@ skip_listen: =20 =20 static int qmp_chardev_open_socket_client(Chardev *chr, - int64_t reconnect_ms, Error **errp) { SocketChardev *s =3D SOCKET_CHARDEV(chr); =20 - if (reconnect_ms > 0) { - s->reconnect_time_ms =3D reconnect_ms; + if (s->reconnect_time_ms > 0) { tcp_chr_connect_client_async(chr); return 0; - } else { - return tcp_chr_connect_client_sync(chr, errp); } + + return tcp_chr_connect_client_sync(chr, errp); } =20 =20 @@ -1378,7 +1376,6 @@ static void qmp_chardev_open_socket(Chardev *chr, bool is_tn3270 =3D sock->has_tn3270 ? sock->tn3270 : false; bool is_waitconnect =3D sock->has_wait ? sock->wait : false; bool is_websock =3D sock->has_websocket ? sock->websocket : false; - int64_t reconnect_ms =3D sock->has_reconnect_ms ? sock->reconnect_ms := 0; SocketAddress *addr; =20 s->is_listen =3D is_listen; @@ -1386,6 +1383,8 @@ static void qmp_chardev_open_socket(Chardev *chr, s->is_tn3270 =3D is_tn3270; s->is_websock =3D is_websock; s->do_nodelay =3D do_nodelay; + s->reconnect_time_ms =3D sock->has_reconnect_ms ? sock->reconnect_ms := 0; + if (sock->tls_creds) { Object *creds; creds =3D object_resolve_path_component( @@ -1450,7 +1449,7 @@ static void qmp_chardev_open_socket(Chardev *chr, return; } } else { - if (qmp_chardev_open_socket_client(chr, reconnect_ms, errp) < 0) { + if (qmp_chardev_open_socket_client(chr, errp) < 0) { return; } } --=20 2.48.1 From nobody Fri Nov 14 18:23:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760362851; cv=none; d=zohomail.com; s=zohoarc; b=c8OWsXL+HLLF5Tgp7DgSfG+aLLbtZkem9KlGC1udhSq4p7HVvUY5ZjVTcwm9LLHxKky7nblhxf6GEvduLgDQ52GkvR/VktgXrw0mHDL45WXcaBhHTOM48MviTVYhJmpuWtyO8J4E+3CdOBnPFPs18uFjUjKGSps5q7nwDgRCgZ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760362851; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=bGbnp9mXGOdgJmDhBTMUTaoPxcAKbnS4yrcT4xk87bQ=; b=h33GGH8kW3IB9rXEoD1ru4sSxPTTmSf2C+zNlYNHMShFoWIlxzSwrRp69V4IomDQYObtv7+mUoV+qdv92qZeGuhl9iKEMSC13gbNgmP9znhQ+18M7SgzQGntQW0eeVqUd41Ls2oTRziBQc6CoqGzswULcF0hZbCtgYGE8ExQF9M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760362850640788.034850668849; Mon, 13 Oct 2025 06:40:50 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8IlL-0006eV-Lx; Mon, 13 Oct 2025 09:38:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlK-0006eF-O1 for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:55 -0400 Received: from forwardcorp1d.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlB-0006aJ-Ld for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:54 -0400 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id 941D780862; Mon, 13 Oct 2025 16:38:41 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a50::1:2a]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id ccOm1D2F0Cg0-omRLFyys; Mon, 13 Oct 2025 16:38:41 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760362721; bh=bGbnp9mXGOdgJmDhBTMUTaoPxcAKbnS4yrcT4xk87bQ=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=XwVxjpzke0Kiy7ktMiHWfHbz/5C1E5sti3e7Qo9WV3ofqvlXNESScHA2saUK1eWp5 Mu0VIgZ2hVLY5M8x/7mdbZjbwMQZRZYOJj/tRMaaHNlkLwrwH4XVHfobhYsrSsrm1J FZGrboKtYCcqYDYdRf1U0nOYOC5tibjrzVWS/8uU= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: marcandre.lureau@redhat.com Cc: pbonzini@redhat.com, berrange@redhat.com, eduardo@habkost.net, qemu-devel@nongnu.org, vsementsov@yandex-team.ru, raphael@enfabrica.net, armbru@redhat.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru Subject: [PATCH v2 2/7] chardev/char: split chardev_init_logfd() out of qemu_char_open() Date: Mon, 13 Oct 2025 16:38:31 +0300 Message-ID: <20251013133836.852018-3-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251013133836.852018-1-vsementsov@yandex-team.ru> References: <20251013133836.852018-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760362857577158500 Content-Type: text/plain; charset="utf-8" We are going to share new chardev_init_logfd() with further alternative initialization interface. Let qemu_char_open() be a wrapper for .open(), and its artifacts (handle be_opened if was not set to false by backend, and filename). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char.c | 49 +++++++++++++++++++++++++++++++------------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index a43b7e5481..d5a2533e8e 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -250,22 +250,6 @@ static void qemu_char_open(Chardev *chr, ChardevBacken= d *backend, bool *be_opened, Error **errp) { ChardevClass *cc =3D CHARDEV_GET_CLASS(chr); - /* Any ChardevCommon member would work */ - ChardevCommon *common =3D backend ? backend->u.null.data : NULL; - - if (common && common->logfile) { - int flags =3D O_WRONLY; - if (common->has_logappend && - common->logappend) { - flags |=3D O_APPEND; - } else { - flags |=3D O_TRUNC; - } - chr->logfd =3D qemu_create(common->logfile, flags, 0666, errp); - if (chr->logfd < 0) { - return; - } - } =20 if (cc->open) { cc->open(chr, backend, be_opened, errp); @@ -1000,6 +984,28 @@ void qemu_chr_set_feature(Chardev *chr, return set_bit(feature, chr->features); } =20 +static bool chardev_init_logfd(Chardev *chr, ChardevBackend *backend, + Error **errp) +{ + ChardevCommon *common =3D backend ? backend->u.null.data : NULL; + + if (common && common->logfile) { + int flags =3D O_WRONLY; + if (common->has_logappend && + common->logappend) { + flags |=3D O_APPEND; + } else { + flags |=3D O_TRUNC; + } + chr->logfd =3D qemu_create(common->logfile, flags, 0666, errp); + if (chr->logfd < 0) { + return false; + } + } + + return true; +} + static Chardev *chardev_new(const char *id, const char *typename, ChardevBackend *backend, GMainContext *gcontext, @@ -1020,11 +1026,14 @@ static Chardev *chardev_new(const char *id, const c= har *typename, chr->label =3D g_strdup(id); chr->gcontext =3D gcontext; =20 + if (!chardev_init_logfd(chr, backend, errp)) { + goto fail; + } + qemu_char_open(chr, backend, &be_opened, &local_err); if (local_err) { error_propagate(errp, local_err); - object_unref(obj); - return NULL; + goto fail; } =20 if (!chr->filename) { @@ -1035,6 +1044,10 @@ static Chardev *chardev_new(const char *id, const ch= ar *typename, } =20 return chr; + +fail: + object_unref(obj); + return NULL; } =20 Chardev *qemu_chardev_new(const char *id, const char *typename, --=20 2.48.1 From nobody Fri Nov 14 18:23:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760362758; cv=none; d=zohomail.com; s=zohoarc; b=a422Jy4zNBWGGeoO6v1eBIcSV4PaX7650zUF0wvpgzuCILmnjdB5BQ8GyKS7bHgXxK9r6OOpZl/es6SCWdy4ICGitLuzYMwn8pkJYhSpiENS/gBXm4VXN/hGgRpqZMNNaRqvoBEiItzjYmQY0Fu4dC6S02nv5TmIjg62lRbbIyw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760362758; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=QFWrlX2U0gd/Ao2+3nodtFsuWYWSxeHAKwHgaTV0mKg=; b=bcnRxQUUX7Mq1oU/TOk0kcmrnBEIeASD00K5Y5J/V5yjRYpgIsk9OGCcfcc/4c8PLmOC1igpHgInuFN2xMOYCDq5Ny9xA6cwPg4Tp78MyWzxtuEU8PvgQFKB1o2aywXfafj7yECtJ0tTOikdT4p8kkJ/oO+HrsnzNCTump1ypIA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760362758226100.95582355301565; Mon, 13 Oct 2025 06:39:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8IlJ-0006dC-Sc; Mon, 13 Oct 2025 09:38:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlG-0006cj-Fh for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:50 -0400 Received: from forwardcorp1d.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlB-0006aV-OO for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:49 -0400 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id 9495380850; Mon, 13 Oct 2025 16:38:42 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a50::1:2a]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id ccOm1D2F0Cg0-qWcS88US; Mon, 13 Oct 2025 16:38:42 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760362722; bh=QFWrlX2U0gd/Ao2+3nodtFsuWYWSxeHAKwHgaTV0mKg=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=Zh8UNYSfVQgdO/52LOoxlCjqLkgRGgOr5yMpKINRw/lEjDrY9eI0UzbulQTSHA4+d p6jYifB0g/TzQo5a3PGF43ICmonmKdGqb8JfqtG0t4UFU8qM6tW9cx3vt7IFheRR7s zjcBjFIoMvEYUvPYcwVg6qOZMLReSQLRjOPl6lA4= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: marcandre.lureau@redhat.com Cc: pbonzini@redhat.com, berrange@redhat.com, eduardo@habkost.net, qemu-devel@nongnu.org, vsementsov@yandex-team.ru, raphael@enfabrica.net, armbru@redhat.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru Subject: [PATCH v2 3/7] chardev/char: qemu_char_open(): add return value Date: Mon, 13 Oct 2025 16:38:32 +0300 Message-ID: <20251013133836.852018-4-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251013133836.852018-1-vsementsov@yandex-team.ru> References: <20251013133836.852018-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760362762883154100 Content-Type: text/plain; charset="utf-8" Accordingly with recommendations in include/qapi/error.h accompany errp by boolean return value and get rid of error propagation. Signed-off-by: Vladimir Sementsov-Ogievskiy --- chardev/char.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index d5a2533e8e..64ec60c0f2 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -246,14 +246,20 @@ int qemu_chr_add_client(Chardev *s, int fd) CHARDEV_GET_CLASS(s)->chr_add_client(s, fd) : -1; } =20 -static void qemu_char_open(Chardev *chr, ChardevBackend *backend, +static bool qemu_char_open(Chardev *chr, ChardevBackend *backend, bool *be_opened, Error **errp) { + ERRP_GUARD(); ChardevClass *cc =3D CHARDEV_GET_CLASS(chr); =20 if (cc->open) { cc->open(chr, backend, be_opened, errp); + if (*errp) { + return false; + } } + + return true; } =20 static void char_init(Object *obj) @@ -1030,9 +1036,7 @@ static Chardev *chardev_new(const char *id, const cha= r *typename, goto fail; } =20 - qemu_char_open(chr, backend, &be_opened, &local_err); - if (local_err) { - error_propagate(errp, local_err); + if (!qemu_char_open(chr, backend, &be_opened, &local_err)) { goto fail; } =20 --=20 2.48.1 From nobody Fri Nov 14 18:23:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760362833; cv=none; d=zohomail.com; s=zohoarc; b=YEXnv5+y3vuXvDEhBC9fUEs6umaqEaEQrmV1AMW3IbmwZQBtu2vukZBkPqfS5Y5uPbipFO/r6WGGeO6qXNYvlYmkFZXkFw4+th0AwOejAH6u9ryBkjqiL2FP+ZqetbefuAr0tqM+C8r3FemtVqPkG9VwNW3AAWtu9IChVWWKshU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760362833; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FgcMsYI1bn9hUGlF235jK8ao8kgyOs3Gy+xNQW4udsE=; b=ZM25Mo3HfYwliAIwGp9MIfR+/LBX6BEOw6+9VXd+P9Br1QNZiqogh8eWKJErSN1YyZawPEHvUxAuwGxeiC8oqTgeq92/f3LK4H4XEpX88Ma3pVUABnQn2VWWnxuL3afnwW0wvLpsJaD2LyFDaLaXcHa8nsKMwfApZBz5J2gSOQQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760362833724115.78137952745101; Mon, 13 Oct 2025 06:40:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8IlK-0006dg-LT; Mon, 13 Oct 2025 09:38:54 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlI-0006dA-Kg for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:52 -0400 Received: from forwardcorp1d.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlC-0006aj-Iu for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:51 -0400 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id 55F5D80867; Mon, 13 Oct 2025 16:38:43 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a50::1:2a]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id ccOm1D2F0Cg0-JHwB3Czw; Mon, 13 Oct 2025 16:38:42 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760362722; bh=FgcMsYI1bn9hUGlF235jK8ao8kgyOs3Gy+xNQW4udsE=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=LuqU+FZdMGKVyNHA9SVRnxoxnWjoT4yqUANodlWIcKqt+j5glJ5t4Ikit1tAayWMd cKFiniDH6YdXbGc+VEbUGkzdMRDiOfkpQwJOgxZOLToQZx/9zcLjil5DvSS5EwOoFX HERAFgS2AiJjryipwR5LlAhGAxHVecKiRVqIprp4= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: marcandre.lureau@redhat.com Cc: pbonzini@redhat.com, berrange@redhat.com, eduardo@habkost.net, qemu-devel@nongnu.org, vsementsov@yandex-team.ru, raphael@enfabrica.net, armbru@redhat.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru Subject: [PATCH v2 4/7] chardev/char: move filename and be_opened handling to qemu_char_open() Date: Mon, 13 Oct 2025 16:38:33 +0300 Message-ID: <20251013133836.852018-5-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251013133836.852018-1-vsementsov@yandex-team.ru> References: <20251013133836.852018-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760362836280154100 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Marc-Andr=C3=A9 Lureau --- 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) } =20 static bool qemu_char_open(Chardev *chr, ChardevBackend *backend, - bool *be_opened, Error **errp) + const char *default_filename, Error **errp) { ERRP_GUARD(); ChardevClass *cc =3D CHARDEV_GET_CLASS(chr); + bool be_opened =3D true; =20 if (cc->open) { - cc->open(chr, backend, be_opened, errp); + cc->open(chr, backend, &be_opened, errp); if (*errp) { return false; } } =20 + if (!chr->filename) { + chr->filename =3D g_strdup(default_filename); + } + + if (be_opened) { + qemu_chr_be_event(chr, CHR_EVENT_OPENED); + } + return true; } =20 @@ -1021,7 +1030,6 @@ static Chardev *chardev_new(const char *id, const cha= r *typename, Object *obj; Chardev *chr =3D NULL; Error *local_err =3D NULL; - bool be_opened =3D true; =20 assert(g_str_has_prefix(typename, "chardev-")); assert(id); @@ -1036,17 +1044,10 @@ static Chardev *chardev_new(const char *id, const c= har *typename, goto fail; } =20 - if (!qemu_char_open(chr, backend, &be_opened, &local_err)) { + if (!qemu_char_open(chr, backend, typename + 8, &local_err)) { goto fail; } =20 - if (!chr->filename) { - chr->filename =3D g_strdup(typename + 8); - } - if (be_opened) { - qemu_chr_be_event(chr, CHR_EVENT_OPENED); - } - return chr; =20 fail: --=20 2.48.1 From nobody Fri Nov 14 18:23:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760362798; cv=none; d=zohomail.com; s=zohoarc; b=kg//y7CnttbbxmMpWAAxmYk+XxBcoy+9gIrFbzDV8FaTPsoKIYCCEYSxWg0Mg1rVciz5WqXiee8iPvWWBLndy8dS85QhsQGq4BlLoxdcH3p0FTwdNT+VvUq1sNGBMkGkfyLSghO20BtC+pP9oCAg4zTmaQEOWHbWZCSwkrum/NY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760362798; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gGtQ/UnrHXk+W76Hl4SsEutQEnTKqDNL1Q6CcvGaUIY=; b=T/EEWd0NP+YYYNagAnXHENp0nK49wvbuVsbjVyqfhSFAhNWxl8HqmUfqtVjAdUip4IWQpWLovUv2mHjesU+2/3J9UM5V8fLhbuenXWgA+zENgZGL60KB08BdE4bJQq6Cn/J+G3X1cmanc5vGREQ0ETF/mlAx7dVWQLk2u566WN8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760362798034242.9502218685659; Mon, 13 Oct 2025 06:39:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8IlO-0006fW-AB; Mon, 13 Oct 2025 09:38:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlI-0006dB-Kj for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:52 -0400 Received: from forwardcorp1d.mail.yandex.net ([2a02:6b8:c41:1300:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlC-0006au-Ga for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:52 -0400 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id 1010680859; Mon, 13 Oct 2025 16:38:44 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a50::1:2a]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id ccOm1D2F0Cg0-QxzBLNKH; Mon, 13 Oct 2025 16:38:43 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760362723; bh=gGtQ/UnrHXk+W76Hl4SsEutQEnTKqDNL1Q6CcvGaUIY=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=IqyxXYHo9C/bPmKjukby+OUSBpqEcfFmLT7YD9mUCiqrF/bsBPNi//6EGeaa/GPx3 EP9GqrvK7GlK/8uA2JmNJHmLE9AkUxNLzOrHSoW2y7sIVO2eM2v41rUR+JlJGG8wn2 7fOCIRcTSdPKV2C13+Vwo5anASJbA9ePnoNH1x5U= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: marcandre.lureau@redhat.com Cc: pbonzini@redhat.com, berrange@redhat.com, eduardo@habkost.net, qemu-devel@nongnu.org, vsementsov@yandex-team.ru, raphael@enfabrica.net, armbru@redhat.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru Subject: [PATCH v2 5/7] chardev/char: introduce .init() + .connect() initialization interface Date: Mon, 13 Oct 2025 16:38:34 +0300 Message-ID: <20251013133836.852018-6-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251013133836.852018-1-vsementsov@yandex-team.ru> References: <20251013133836.852018-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a02:6b8:c41:1300:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=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 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760362800417154100 Content-Type: text/plain; charset="utf-8" We'll need a possibility to postpone connect step to later point in time to implement backend-transfer migration feature for vhost-user-blk in further commits. Let's start with new char interface for backends. .init() takes QAPI parameters and should parse them, called early .connect() should actually establish a connection, and postponed to the point of attaching to frontend. Called at later point, either at time of attaching frontend, either from qemu_chr_wait_connected(). Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-fe.c | 4 ++++ chardev/char.c | 40 +++++++++++++++++++++++++++++++++++++--- include/chardev/char.h | 22 +++++++++++++++++++++- 3 files changed, 62 insertions(+), 4 deletions(-) diff --git a/chardev/char-fe.c b/chardev/char-fe.c index 158a5f4f55..973fed5bea 100644 --- a/chardev/char-fe.c +++ b/chardev/char-fe.c @@ -193,6 +193,10 @@ bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Erro= r **errp) { unsigned int tag =3D 0; =20 + if (!qemu_chr_connect(s, errp)) { + return false; + } + if (s) { if (CHARDEV_IS_MUX(s)) { MuxChardev *d =3D MUX_CHARDEV(s); diff --git a/chardev/char.c b/chardev/char.c index 6498d53daa..01ffe37acf 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -33,6 +33,7 @@ #include "qapi/error.h" #include "qapi/qapi-commands-char.h" #include "qapi/qmp/qerror.h" +#include "qom/object.h" #include "system/replay.h" #include "qemu/help_option.h" #include "qemu/module.h" @@ -338,10 +339,29 @@ static bool qemu_chr_is_busy(Chardev *s) } } =20 +bool qemu_chr_connect(Chardev *chr, Error **errp) +{ + ChardevClass *cc =3D CHARDEV_GET_CLASS(chr); + + if (chr->connect_postponed) { + assert(cc->connect); + chr->connect_postponed =3D false; + if (!cc->connect(chr, errp)) { + return false; + } + } + + return true; +} + int qemu_chr_wait_connected(Chardev *chr, Error **errp) { ChardevClass *cc =3D CHARDEV_GET_CLASS(chr); =20 + if (!qemu_chr_connect(chr, errp)) { + return -1; + } + if (cc->chr_wait_connected) { return cc->chr_wait_connected(chr, errp); } @@ -1029,7 +1049,7 @@ static Chardev *chardev_new(const char *id, const cha= r *typename, { Object *obj; Chardev *chr =3D NULL; - Error *local_err =3D NULL; + ChardevClass *cc; =20 assert(g_str_has_prefix(typename, "chardev-")); assert(id); @@ -1044,8 +1064,22 @@ static Chardev *chardev_new(const char *id, const ch= ar *typename, goto fail; } =20 - if (!qemu_char_open(chr, backend, typename + 8, &local_err)) { - goto fail; + cc =3D CHARDEV_GET_CLASS(chr); + + if (cc->init) { + assert(!cc->open); + assert(cc->connect); + + if (!cc->init(chr, backend, errp)) { + goto fail; + } + assert(chr->filename); + + chr->connect_postponed =3D true; + } else { + if (!qemu_char_open(chr, backend, typename + 8, errp)) { + goto fail; + } } =20 return chr; diff --git a/include/chardev/char.h b/include/chardev/char.h index 429852f8d9..ebadaf3482 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -63,6 +63,7 @@ struct Chardev { CharBackend *be; char *label; char *filename; + bool connect_postponed; int logfd; int be_open; /* used to coordinate the chardev-change special-case: */ @@ -225,6 +226,7 @@ QemuOpts *qemu_chr_parse_compat(const char *label, cons= t char *filename, bool permit_mux_mon); int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all= ); #define qemu_chr_write_all(s, buf, len) qemu_chr_write(s, buf, len, true) +bool qemu_chr_connect(Chardev *chr, Error **errp); int qemu_chr_wait_connected(Chardev *chr, Error **errp); =20 #define TYPE_CHARDEV "chardev" @@ -259,10 +261,28 @@ struct ChardevClass { /* parse command line options and populate QAPI @backend */ void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp); =20 - /* called after construction, open/starts the backend */ + /* + * Called after construction, create and open/starts the backend, + * mutual exclusive with .init. .connect must not be defined when + * .open is defined. + */ void (*open)(Chardev *chr, ChardevBackend *backend, bool *be_opened, Error **errp); =20 + /* + * Called after construction, create the backend, mutual exclusive + * with .open, and must be accompanied by .connect. + * Must set chr-filename. + */ + bool (*init)(Chardev *chr, ChardevBackend *backend, + Error **errp); + + /* + * Called after .init(), open/starts the backend, mutual exclusive + * with .open. Must send CHR_EVENT_OPENED. + */ + bool (*connect)(Chardev *chr, Error **errp); + /* write buf to the backend */ int (*chr_write)(Chardev *s, const uint8_t *buf, int len); =20 --=20 2.48.1 From nobody Fri Nov 14 18:23:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760362835; cv=none; d=zohomail.com; s=zohoarc; b=MH+gmYF1tWGuqfcKTcORhdXUrmL0OXIYG+ElIgmshrnAGAn+s/FhYAFaj0Af9FcZ1CwcuNAh1g5BlU2eVSJnISnB7kKWl5YybCrDoCHnbZGUIb3i8/gyt4xDlhDraZwC+0wh7q5vAGuKsfZJAy3hHv2J5OfkASTTi1yl2GF2w64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760362835; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=06Uu2iVsnsapITxTvvSPPGPFljkUJPRyJShRcyWyILA=; b=ZbqqR+jwEGDS/mTIEbi9G+HSXH8qSnf0przKtt84eFMv0N1obd8DzwkntVK8dWSza6MrIDzxDb6Y6D4Qw+e3kfDKVTD4eqJXwdBzj7qVT37o9s9nBeb74LmW8CbeUnWFA/E0YyvNJVaZEeaf65vp6CUGAnx0jlT6b7FG16PIEO0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760362834860701.021625241718; Mon, 13 Oct 2025 06:40:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8IlL-0006eU-Hm; Mon, 13 Oct 2025 09:38:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlJ-0006dW-Au for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:53 -0400 Received: from forwardcorp1d.mail.yandex.net ([2a02:6b8:c41:1300:1:45:d181:df01]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlC-0006az-Kw for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:52 -0400 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id D883A80871; Mon, 13 Oct 2025 16:38:44 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a50::1:2a]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id ccOm1D2F0Cg0-1xuDBwId; Mon, 13 Oct 2025 16:38:44 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760362724; bh=06Uu2iVsnsapITxTvvSPPGPFljkUJPRyJShRcyWyILA=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=FT/gNPaIic/2RMEkG1V+FQrABzBmuGJ5q30bJyrDo2d3lgOjeg4hIKpmXwON6sRof yFEeWI8aTpBPUACsCMJ3bxrdsxgIBLvny4MLOvh8q7ZzWeZ/ghebpNDcDtT6iYcE5O ydwgIApppXDbbTTonoQMNXWtGvG8qxcTOw1LP8vs= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: marcandre.lureau@redhat.com Cc: pbonzini@redhat.com, berrange@redhat.com, eduardo@habkost.net, qemu-devel@nongnu.org, vsementsov@yandex-team.ru, raphael@enfabrica.net, armbru@redhat.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru Subject: [PATCH v2 6/7] chardev/char-socket: move to .init + .connect api Date: Mon, 13 Oct 2025 16:38:35 +0300 Message-ID: <20251013133836.852018-7-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251013133836.852018-1-vsementsov@yandex-team.ru> References: <20251013133836.852018-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2a02:6b8:c41:1300:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=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 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760362841401158500 Content-Type: text/plain; charset="utf-8" Move char-socket to new API. This will help to realize backend-transfer feature for vhost-user-blk. With this commit qemu_chr_fe_init() starts to do connecting, so we should handle its errors instead of passing &error_abort. Also, move qemu_chr_fe_init() in test-char.c, to trigger connect before trying to get address. Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: Marc-Andr=C3=A9 Lureau --- chardev/char-socket.c | 55 ++++++++++++++++++++--------------- chardev/char.c | 7 +++-- include/chardev/char-socket.h | 1 + tests/unit/test-char.c | 14 ++++----- ui/dbus-chardev.c | 12 ++++++-- 5 files changed, 54 insertions(+), 35 deletions(-) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index f3bc6290d2..0a5738c158 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1287,6 +1287,25 @@ static int qmp_chardev_open_socket_client(Chardev *c= hr, } =20 =20 +static bool char_socket_connect(Chardev *chr, Error **errp) +{ + SocketChardev *s =3D SOCKET_CHARDEV(chr); + + if (s->is_listen) { + if (qmp_chardev_open_socket_server(chr, s->is_telnet || s->is_tn32= 70, + s->is_waitconnect, errp) < 0) { + return false; + } + } else { + if (qmp_chardev_open_socket_client(chr, errp) < 0) { + return false; + } + } + + return true; +} + + static bool qmp_chardev_validate_socket(ChardevSocket *sock, SocketAddress *addr, Error **errp) @@ -1363,10 +1382,9 @@ static bool qmp_chardev_validate_socket(ChardevSocke= t *sock, } =20 =20 -static void qmp_chardev_open_socket(Chardev *chr, - ChardevBackend *backend, - bool *be_opened, - Error **errp) +static bool char_socket_init(Chardev *chr, + ChardevBackend *backend, + Error **errp) { SocketChardev *s =3D SOCKET_CHARDEV(chr); ChardevSocket *sock =3D backend->u.socket.data; @@ -1374,7 +1392,6 @@ static void qmp_chardev_open_socket(Chardev *chr, bool is_listen =3D sock->has_server ? sock->server : true; bool is_telnet =3D sock->has_telnet ? sock->telnet : false; bool is_tn3270 =3D sock->has_tn3270 ? sock->tn3270 : false; - bool is_waitconnect =3D sock->has_wait ? sock->wait : false; bool is_websock =3D sock->has_websocket ? sock->websocket : false; SocketAddress *addr; =20 @@ -1383,6 +1400,7 @@ static void qmp_chardev_open_socket(Chardev *chr, s->is_tn3270 =3D is_tn3270; s->is_websock =3D is_websock; s->do_nodelay =3D do_nodelay; + s->is_waitconnect =3D sock->has_wait ? sock->wait : false; s->reconnect_time_ms =3D sock->has_reconnect_ms ? sock->reconnect_ms := 0; =20 if (sock->tls_creds) { @@ -1392,7 +1410,7 @@ static void qmp_chardev_open_socket(Chardev *chr, if (!creds) { error_setg(errp, "No TLS credentials with id '%s'", sock->tls_creds); - return; + return false; } s->tls_creds =3D (QCryptoTLSCreds *) object_dynamic_cast(creds, @@ -1400,7 +1418,7 @@ static void qmp_chardev_open_socket(Chardev *chr, if (!s->tls_creds) { error_setg(errp, "Object with id '%s' is not TLS credentials", sock->tls_creds); - return; + return false; } object_ref(OBJECT(s->tls_creds)); if (!qcrypto_tls_creds_check_endpoint(s->tls_creds, @@ -1408,7 +1426,7 @@ static void qmp_chardev_open_socket(Chardev *chr, ? QCRYPTO_TLS_CREDS_ENDPOINT_SER= VER : QCRYPTO_TLS_CREDS_ENDPOINT_CLI= ENT, errp)) { - return; + return false; } } s->tls_authz =3D g_strdup(sock->tls_authz); @@ -1416,7 +1434,7 @@ static void qmp_chardev_open_socket(Chardev *chr, s->addr =3D addr =3D socket_address_flatten(sock->addr); =20 if (!qmp_chardev_validate_socket(sock, addr, errp)) { - return; + return false; } =20 qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_RECONNECTABLE); @@ -1433,26 +1451,14 @@ static void qmp_chardev_open_socket(Chardev *chr, */ if (!chr->handover_yank_instance) { if (!yank_register_instance(CHARDEV_YANK_INSTANCE(chr->label), err= p)) { - return; + return false; } } s->registered_yank =3D true; =20 - /* be isn't opened until we get a connection */ - *be_opened =3D false; - update_disconnected_filename(s); =20 - if (s->is_listen) { - if (qmp_chardev_open_socket_server(chr, is_telnet || is_tn3270, - is_waitconnect, errp) < 0) { - return; - } - } else { - if (qmp_chardev_open_socket_client(chr, errp) < 0) { - return; - } - } + return true; } =20 static void qemu_chr_parse_socket(QemuOpts *opts, ChardevBackend *backend, @@ -1576,7 +1582,8 @@ static void char_socket_class_init(ObjectClass *oc, c= onst void *data) cc->supports_yank =3D true; =20 cc->parse =3D qemu_chr_parse_socket; - cc->open =3D qmp_chardev_open_socket; + cc->init =3D char_socket_init; + cc->connect =3D char_socket_connect; cc->chr_wait_connected =3D tcp_chr_wait_connected; cc->chr_write =3D tcp_chr_write; cc->chr_sync_read =3D tcp_chr_sync_read; diff --git a/chardev/char.c b/chardev/char.c index 01ffe37acf..4d151f537c 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -1221,12 +1221,15 @@ ChardevReturn *qmp_chardev_change(const char *id, C= hardevBackend *backend, } =20 chr->be =3D NULL; - qemu_chr_fe_init(be, chr_new, &error_abort); + if (!qemu_chr_fe_init(be, chr_new, errp)) { + object_unref(OBJECT(chr_new)); + return NULL; + } =20 if (be->chr_be_change(be->opaque) < 0) { error_setg(errp, "Chardev '%s' change failed", chr_new->label); chr_new->be =3D NULL; - qemu_chr_fe_init(be, chr, &error_abort); + qemu_chr_fe_init(be, chr, NULL); if (closed_sent) { qemu_chr_be_event(chr, CHR_EVENT_OPENED); } diff --git a/include/chardev/char-socket.h b/include/chardev/char-socket.h index d6d13ad37f..0109727eaa 100644 --- a/include/chardev/char-socket.h +++ b/include/chardev/char-socket.h @@ -68,6 +68,7 @@ struct SocketChardev { bool is_listen; bool is_telnet; bool is_tn3270; + bool is_waitconnect; GSource *telnet_source; TCPChardevTelnetInit *telnet_init; =20 diff --git a/tests/unit/test-char.c b/tests/unit/test-char.c index f30a39f61f..5c9482a478 100644 --- a/tests/unit/test-char.c +++ b/tests/unit/test-char.c @@ -845,6 +845,7 @@ static void char_websock_test(void) 0xef, 0xaa, 0xc5, 0x97, /* Masking key */ 0xec, 0x42 /* Status code */ }; =20 + qemu_chr_fe_init(&be, chr, &error_abort); addr =3D object_property_get_qobject(OBJECT(chr), "addr", &error_abort= ); qdict =3D qobject_to(QDict, addr); port =3D qdict_get_str(qdict, "port"); @@ -852,7 +853,6 @@ static void char_websock_test(void) handshake_port =3D g_strdup_printf(handshake, port, port); qobject_unref(qdict); =20 - qemu_chr_fe_init(&be, chr, &error_abort); qemu_chr_fe_set_handlers(&be, websock_server_can_read, websock_server_= read, NULL, NULL, chr, NULL, true); =20 @@ -1216,6 +1216,8 @@ static void char_socket_server_test(gconstpointer opa= que) g_assert_nonnull(chr); g_assert(!object_property_get_bool(OBJECT(chr), "connected", &error_ab= ort)); =20 + qemu_chr_fe_init(&be, chr, &error_abort); + qaddr =3D object_property_get_qobject(OBJECT(chr), "addr", &error_abor= t); g_assert_nonnull(qaddr); =20 @@ -1224,8 +1226,6 @@ static void char_socket_server_test(gconstpointer opa= que) visit_free(v); qobject_unref(qaddr); =20 - qemu_chr_fe_init(&be, chr, &error_abort); - reconnect: data.event =3D -1; data.be =3D &be; @@ -1417,6 +1417,8 @@ static void char_socket_client_test(gconstpointer opa= que) qemu_opts_del(opts); g_assert_nonnull(chr); =20 + qemu_chr_fe_init(&be, chr, &error_abort); + if (config->reconnect) { /* * If reconnect is set, the connection will be @@ -1431,8 +1433,6 @@ static void char_socket_client_test(gconstpointer opa= que) &error_abort)); } =20 - qemu_chr_fe_init(&be, chr, &error_abort); - reconnect: data.event =3D -1; data.be =3D &be; @@ -1550,6 +1550,8 @@ static void char_socket_server_two_clients_test(gcons= tpointer opaque) g_assert_nonnull(chr); g_assert(!object_property_get_bool(OBJECT(chr), "connected", &error_ab= ort)); =20 + qemu_chr_fe_init(&be, chr, &error_abort); + qaddr =3D object_property_get_qobject(OBJECT(chr), "addr", &error_abor= t); g_assert_nonnull(qaddr); =20 @@ -1558,8 +1560,6 @@ static void char_socket_server_two_clients_test(gcons= tpointer opaque) visit_free(v); qobject_unref(qaddr); =20 - qemu_chr_fe_init(&be, chr, &error_abort); - qemu_chr_fe_set_handlers(&be, char_socket_can_read, char_socket_discar= d_read, count_closed_event, NULL, &closed, NULL, true); diff --git a/ui/dbus-chardev.c b/ui/dbus-chardev.c index d05dddaf81..23cf9d6ee9 100644 --- a/ui/dbus-chardev.c +++ b/ui/dbus-chardev.c @@ -210,8 +210,14 @@ dbus_chr_open(Chardev *chr, ChardevBackend *backend, if (*errp) { return; } - CHARDEV_CLASS(object_class_by_name(TYPE_CHARDEV_SOCKET))->open( - chr, be, be_opened, errp); + if (!CHARDEV_CLASS(object_class_by_name(TYPE_CHARDEV_SOCKET))->init( + chr, be, errp)) { + return; + } + if (!CHARDEV_CLASS(object_class_by_name(TYPE_CHARDEV_SOCKET))->connect( + chr, errp)) { + return; + } } =20 static void @@ -276,6 +282,8 @@ char_dbus_class_init(ObjectClass *oc, const void *data) =20 cc->parse =3D dbus_chr_parse; cc->open =3D dbus_chr_open; + cc->init =3D NULL; + cc->connect =3D NULL; cc->chr_set_fe_open =3D dbus_chr_set_fe_open; cc->chr_set_echo =3D dbus_chr_set_echo; klass->parent_chr_be_event =3D cc->chr_be_event; --=20 2.48.1 From nobody Fri Nov 14 18:23:23 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=yandex-team.ru ARC-Seal: i=1; a=rsa-sha256; t=1760362817; cv=none; d=zohomail.com; s=zohoarc; b=X4JIrO45NGXUPXvRPudEtNOrQam4BOSpXnZsai0US+646gXGkTu/3JuRENnrJbTyxii3vRyB7mkTcTCXGCdEwTGFNuYSdDsOqjdocgVUxchlu53j6AfQkpYzvUWAcrH5Ofw56/DmcKkOdoIVPcWCf8RuwueD2mCmoqvIyReloic= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1760362817; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=C18OuIlimmlWDuharbJ33fa8fObs2EZBJ6NY+9n/VlQ=; b=apQIrBP68OIgR2fAhst522q1ZUSvMZloM+Ol4E10bKWgYoblHkd1Bpf/IGbWUVaJbCtn+CzPAz1ikiqUiW6f+vxLk2TzGf+6h4mw+DGfuakNwHD4D7PowkijL0iIh13VTRQwiSVyDdB9ruxZTaq27b06WTDaCf/dcfqNFlp9iLk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1760362816542262.09953436388116; Mon, 13 Oct 2025 06:40:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v8IlM-0006ei-6q; Mon, 13 Oct 2025 09:38:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlK-0006eE-OK for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:55 -0400 Received: from forwardcorp1d.mail.yandex.net ([178.154.239.200]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v8IlD-0006b6-Af for qemu-devel@nongnu.org; Mon, 13 Oct 2025 09:38:54 -0400 Received: from mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net [IPv6:2a02:6b8:c42:65a0:0:640:e1de:0]) by forwardcorp1d.mail.yandex.net (Yandex) with ESMTPS id 822A48086B; Mon, 13 Oct 2025 16:38:45 +0300 (MSK) Received: from vsementsov-lin.. (unknown [2a02:6bf:8080:a50::1:2a]) by mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id ccOm1D2F0Cg0-0k4i5MRo; Mon, 13 Oct 2025 16:38:45 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1760362725; bh=C18OuIlimmlWDuharbJ33fa8fObs2EZBJ6NY+9n/VlQ=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=Zc2MqVjMnnw7l0H4Sh8GxdwyjaOYftV0UIB9apxwTDYlkCzxXEXHlfEObr42dwvg+ zQjxbL0PYIwGg2XFAWJHO1HtHKOXQuIzXSmv2DQ36RLm0vjQX0X1phwviNZ9cNk9Ma hfzEWkful7S2Xr5/+bGTj2ba5tlfyyRvfPZjb6PI= Authentication-Results: mail-nwsmtp-smtp-corp-main-56.klg.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: marcandre.lureau@redhat.com Cc: pbonzini@redhat.com, berrange@redhat.com, eduardo@habkost.net, qemu-devel@nongnu.org, vsementsov@yandex-team.ru, raphael@enfabrica.net, armbru@redhat.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru Subject: [PATCH v2 7/7] char: vhost-user-blk call connect by hand Date: Mon, 13 Oct 2025 16:38:36 +0300 Message-ID: <20251013133836.852018-8-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20251013133836.852018-1-vsementsov@yandex-team.ru> References: <20251013133836.852018-1-vsementsov@yandex-team.ru> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=178.154.239.200; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1d.mail.yandex.net 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, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=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 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @yandex-team.ru) X-ZM-MESSAGEID: 1760362819545158500 Content-Type: text/plain; charset="utf-8" Give vhost-user-blk a possibility (and responsibility) to decide when do connect. It will help us to realize vhost-user-blk backend-transfer migration feature: For incoming migration we'll need to postpone connect at least until early stage of migrate-incoming command, when we already know all migration parameters and can decide, are we going to do incoming backend-transfer (and get chardev fd from incoming stream), or we finally need to connect. With this patch, we don't modify vhost-user-blk.c: it already do call qemu_chr_fe_wait_connected(), which in turn calls qemu_chr_connect(). Signed-off-by: Vladimir Sementsov-Ogievskiy --- chardev/char-fe.c | 21 +++++++++++++++++---- hw/core/qdev-properties-system.c | 2 +- include/chardev/char-fe.h | 2 ++ 3 files changed, 20 insertions(+), 5 deletions(-) diff --git a/chardev/char-fe.c b/chardev/char-fe.c index 973fed5bea..9e2c658cb9 100644 --- a/chardev/char-fe.c +++ b/chardev/char-fe.c @@ -189,12 +189,20 @@ bool qemu_chr_fe_backend_open(CharBackend *be) return be->chr && be->chr->be_open; } =20 -bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp) +bool qemu_chr_fe_init_ex(CharBackend *b, Chardev *s, ObjectClass *oc, + Error **errp) { unsigned int tag =3D 0; - - if (!qemu_chr_connect(s, errp)) { - return false; + const char *driver =3D oc ? object_class_get_name(oc) : NULL; + + /* + * vhost-user-blk wants call qemu_chr_connect by hand, + * to support backend-transfer migration feature. + */ + if (!driver || !g_str_has_prefix(driver, "vhost-user-blk")) { + if (!qemu_chr_connect(s, errp)) { + return false; + } } =20 if (s) { @@ -218,6 +226,11 @@ bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Erro= r **errp) return true; } =20 +bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp) +{ + return qemu_chr_fe_init_ex(b, s, NULL, errp); +} + void qemu_chr_fe_deinit(CharBackend *b, bool del) { assert(b); diff --git a/hw/core/qdev-properties-system.c b/hw/core/qdev-properties-sys= tem.c index 1f810b7ddf..35eed17d4d 100644 --- a/hw/core/qdev-properties-system.c +++ b/hw/core/qdev-properties-system.c @@ -297,7 +297,7 @@ static void set_chr(Object *obj, Visitor *v, const char= *name, void *opaque, if (s =3D=3D NULL) { error_setg(errp, "Property '%s.%s' can't find value '%s'", object_get_typename(obj), name, str); - } else if (!qemu_chr_fe_init(be, s, errp)) { + } else if (!qemu_chr_fe_init_ex(be, s, obj->class, errp)) { error_prepend(errp, "Property '%s.%s' can't take value '%s': ", object_get_typename(obj), name, str); } diff --git a/include/chardev/char-fe.h b/include/chardev/char-fe.h index 8ef05b3dd0..f1c05cc5ed 100644 --- a/include/chardev/char-fe.h +++ b/include/chardev/char-fe.h @@ -34,6 +34,8 @@ struct CharBackend { * Returns: false on error. */ bool qemu_chr_fe_init(CharBackend *b, Chardev *s, Error **errp); +bool qemu_chr_fe_init_ex(CharBackend *b, Chardev *s, ObjectClass *oc, + Error **errp); =20 /** * qemu_chr_fe_deinit: --=20 2.48.1