From nobody Tue Feb 10 11:33:26 2026 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=1769722451; cv=none; d=zohomail.com; s=zohoarc; b=KSvHsgDWUy2QzaRlHynK7AHc83NRR3jyXfI1v0FxLaRwF1Ip5Ts3X75QoQyepiNON0Ub+8UcZ+j3UknO0swQ1s9p6/U3kBep59KEGfdvTmJZt5eKiAD6NXaAF25TcSGq8KAG6sW3jUytSY0PuU/Mly059IcSBINzcMV6GDocOXs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722451; 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=zhpdYUDyWvsRyH497N4ml/LPytT4o+SDimaUItc8UBA=; b=jGWhwKB3jiYyOx1d8QyzuEN7qWRuDXUyFFa97qkPKCG8hkINsHTWXSFWvLCcbAirz7mEZUCuFBe90wHaYEelT3fP8Gd9MIGvOPLQmkfCOtehuARSN6PF7GvK9Th5DzhePx6ppBvG6/Jh9gG+n9GDwbuqig9gihnBuz8VDdqtOwA= 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 176972245121035.83711755082129; Thu, 29 Jan 2026 13:34:11 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcs-0001Wk-Cp; Thu, 29 Jan 2026 16:32:30 -0500 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 1vlZcq-0001UQ-4F for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900: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 1vlZcm-00014l-9e for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:27 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 8A5338080A; Fri, 30 Jan 2026 00:32:20 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-wtJ4Q0zB; Fri, 30 Jan 2026 00:32:20 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722340; bh=zhpdYUDyWvsRyH497N4ml/LPytT4o+SDimaUItc8UBA=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=syJuwqKqYu/SBmGsB2crk/ibhvn0U4r8BrUq45RXfvGYUnU9sow5D8+eK87iJdh6I PxNOvCNPQBJ2ii50wmyF1MIKjoZNWeSd/gyg+0uBrYh9Oba9yeN53k2SBPAEchVfRF IX8Dg+xF9bxm4B8q8JxWFwiZH2ULSvoOjdnTC2so= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru, Ilya Maximets Subject: [PATCH v2 01/12] net/af-xdp: fix type overflow Date: Fri, 30 Jan 2026 00:32:03 +0300 Message-ID: <20260129213215.1405459-2-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722454644158500 Content-Type: text/plain; charset="utf-8" In for-loop in net_init_af_xdp, we do nc->queue_index =3D i, where is is int64_t for 0 to queues-1, and nc->queue_index is unsigned int. Also in parse_socket_fds, g_strv_length() returns guint which is equivalent to unsigned int. Let's simply use unsigned int type for queues, and update the check appropriately. Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/af-xdp.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/net/af-xdp.c b/net/af-xdp.c index 14f302ea21..bb7a7d8e33 100644 --- a/net/af-xdp.c +++ b/net/af-xdp.c @@ -442,14 +442,14 @@ static NetClientInfo net_af_xdp_info =3D { }; =20 static int *parse_socket_fds(const char *sock_fds_str, - int64_t n_expected, Error **errp) + unsigned n_expected, Error **errp) { gchar **substrings =3D g_strsplit(sock_fds_str, ":", -1); - int64_t i, n_sock_fds =3D g_strv_length(substrings); + unsigned i, n_sock_fds =3D g_strv_length(substrings); int *sock_fds =3D NULL; =20 if (n_sock_fds !=3D n_expected) { - error_setg(errp, "expected %"PRIi64" socket fds, got %"PRIi64, + error_setg(errp, "expected %u socket fds, got %u", n_expected, n_sock_fds); goto exit; } @@ -484,7 +484,7 @@ int net_init_af_xdp(const Netdev *netdev, unsigned int ifindex; uint32_t prog_id =3D 0; g_autofree int *sock_fds =3D NULL; - int64_t i, queues; + unsigned i, queues; Error *err =3D NULL; AFXDPState *s; bool inhibit; @@ -496,13 +496,14 @@ int net_init_af_xdp(const Netdev *netdev, return -1; } =20 - queues =3D opts->has_queues ? opts->queues : 1; - if (queues < 1) { + if (opts->has_queues && (opts->queues < 0 || opts->queues > UINT_MAX))= { error_setg(errp, "invalid number of queues (%" PRIi64 ") for '%s'", - queues, opts->ifname); + opts->queues, opts->ifname); return -1; } =20 + queues =3D opts->has_queues ? opts->queues : 1; + inhibit =3D opts->has_inhibit && opts->inhibit; if (inhibit && !opts->sock_fds && !opts->map_path) { error_setg(errp, "'inhibit=3Don' requires 'sock-fds' or 'map-path'= "); @@ -537,7 +538,7 @@ int net_init_af_xdp(const Netdev *netdev, =20 for (i =3D 0; i < queues; i++) { nc =3D qemu_new_net_client(&net_af_xdp_info, peer, "af-xdp", name); - qemu_set_info_str(nc, "af-xdp%"PRIi64" to %s", i, opts->ifname); + qemu_set_info_str(nc, "af-xdp%u to %s", i, opts->ifname); nc->queue_index =3D i; =20 if (!nc0) { --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722421; cv=none; d=zohomail.com; s=zohoarc; b=hpa/njKwjeN9voasz3a80NYXvEayxJaK3aN334T4LXrJrfYYveQZ7naRII6gFdKTnzJBQe3tzE677jRi40ocfFsx1t4k34ee6BP1k7h070z7z0uyZyLMIiKb+LfpXxs/9YOffWBH8LRWnN5BhLhzW1XWPE+BVfeYb4JXH//EN/o= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722421; 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=1Q5dYllhtrYtedtJ6lbMYb+MJcVRhmL3kiAJkKDdW/4=; b=gST0RE0qHz3royVsMajGCX8Qvfbw6O5lo7+6KxdCHCM2sMhBvY9W0ElYAeNVgjUaA3JFW0XcR2UE3tvUklRdIpYT+29d/ShkqVJfw7uM8g9WLiHMef6j+9AP/zSeSHFDL4yXBk2L/Fzl6rok9CDl8UDdGt6L0VBVaN2+gMhdMds= 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 17697224212681.3126321323853745; Thu, 29 Jan 2026 13:33:41 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcr-0001WJ-V3; Thu, 29 Jan 2026 16:32:29 -0500 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 1vlZcq-0001Ub-BA for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlZcm-00014s-Ci for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 367278080D; Fri, 30 Jan 2026 00:32:21 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-Cic6XV9k; Fri, 30 Jan 2026 00:32:20 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722340; bh=1Q5dYllhtrYtedtJ6lbMYb+MJcVRhmL3kiAJkKDdW/4=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=Gi7+eYHodyS/WY7CgXlI5SwouUICjgTdQQQ8HAdecgSLQw8U6/Gz1ZwSC/ShnUvwO yXckNA4Y1p3x6EdpIqhtNgf9Xpls/VnQ1P2wOkmSX9qCndbKcNRwPgwth7iOFU2hVV 3P8kbETZw/SRqaU4xUJgL1vEgXcIO6HdIAuyP+pA= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 02/12] net/tap: net_init_tap_one(): add return value Date: Fri, 30 Jan 2026 00:32:04 +0300 Message-ID: <20260129213215.1405459-3-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722424422154100 Content-Type: text/plain; charset="utf-8" Follow common recommendations in include/qapi/error.h of having a return value together with errp. This allows to avoid error propagation. Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 42 +++++++++++++++++------------------------- 1 file changed, 17 insertions(+), 25 deletions(-) diff --git a/net/tap.c b/net/tap.c index 8d7ab6ba6f..a389aec218 100644 --- a/net/tap.c +++ b/net/tap.c @@ -703,7 +703,7 @@ static int net_tap_init(const NetdevTapOptions *tap, in= t *vnet_hdr, =20 #define MAX_TAP_QUEUES 1024 =20 -static void net_init_tap_one(const NetdevTapOptions *tap, NetClientState *= peer, +static bool net_init_tap_one(const NetdevTapOptions *tap, NetClientState *= peer, const char *model, const char *name, const char *ifname, const char *script, const char *downscript, const char *vhostfdna= me, @@ -783,10 +783,11 @@ static void net_init_tap_one(const NetdevTapOptions *= tap, NetClientState *peer, } } =20 - return; + return true; =20 failed: qemu_del_net_client(&s->nc); + return false; } =20 static int get_fds(char *str, char *fds[], int max) @@ -821,7 +822,6 @@ int net_init_tap(const Netdev *netdev, const char *name, const NetdevTapOptions *tap; int fd, vnet_hdr =3D 0, i =3D 0, queues; /* for the no-fd, no-helper case */ - Error *err =3D NULL; const char *vhostfdname; char ifname[128]; int ret =3D 0; @@ -869,11 +869,9 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, return -1; } =20 - net_init_tap_one(tap, peer, "tap", name, NULL, - NULL, NULL, - vhostfdname, vnet_hdr, fd, &err); - if (err) { - error_propagate(errp, err); + if (!net_init_tap_one(tap, peer, "tap", name, NULL, + NULL, NULL, + vhostfdname, vnet_hdr, fd, errp)) { close(fd); return -1; } @@ -930,12 +928,10 @@ int net_init_tap(const Netdev *netdev, const char *na= me, goto free_fail; } =20 - net_init_tap_one(tap, peer, "tap", name, ifname, - NULL, NULL, - tap->vhostfds ? vhost_fds[i] : NULL, - vnet_hdr, fd, &err); - if (err) { - error_propagate(errp, err); + if (!net_init_tap_one(tap, peer, "tap", name, ifname, + NULL, NULL, + tap->vhostfds ? vhost_fds[i] : NULL, + vnet_hdr, fd, errp)) { ret =3D -1; goto free_fail; } @@ -975,11 +971,9 @@ free_fail: return -1; } =20 - net_init_tap_one(tap, peer, "bridge", name, ifname, - NULL, NULL, vhostfdname, - vnet_hdr, fd, &err); - if (err) { - error_propagate(errp, err); + if (!net_init_tap_one(tap, peer, "bridge", name, ifname, + NULL, NULL, vhostfdname, + vnet_hdr, fd, errp)) { close(fd); return -1; } @@ -1015,12 +1009,10 @@ free_fail: } } =20 - net_init_tap_one(tap, peer, "tap", name, ifname, - i >=3D 1 ? NULL : script, - i >=3D 1 ? NULL : downscript, - vhostfdname, vnet_hdr, fd, &err); - if (err) { - error_propagate(errp, err); + if (!net_init_tap_one(tap, peer, "tap", name, ifname, + i >=3D 1 ? NULL : script, + i >=3D 1 ? NULL : downscript, + vhostfdname, vnet_hdr, fd, errp)) { close(fd); return -1; } --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722395; cv=none; d=zohomail.com; s=zohoarc; b=ZT2ri7SLBxW+ueV64UjCB1mdFFYUNmYAxR+G6dKjjk2lObjLizPnI5qL0D6Vms3cjfbDr5pcSqcejXl8Fi/EaMUZdASs4B1FHcrzUfEWFpJ9rO2sKX1sRby21H6/KxxuO/7ulwd8fp0F2oy6+QZmbLXUzbJ5TSeuh5KbdPK+eyU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722395; 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=5mIy1CyhCgoPLn4Qcg9Hf6mr1MP5XtgStzgPYFDTSFk=; b=ik+rLeOrJANqSiHY0hsh2QFfEkQzf1phM+8hJ+W7YlUFojEykAkf53uYh59GTgrzf0ZTPmRL3Vr10cxMvmb28krrRS1R0wmtqEZvLa9/CsVMHJVedtQXDHlMUB/9jwk39IkOEvtd98niJy7FUxL9/84peP8HvwGRJz8NSOJHWHo= 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 1769722394762886.1467144405079; Thu, 29 Jan 2026 13:33:14 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcr-0001WD-Sp; Thu, 29 Jan 2026 16:32:29 -0500 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 1vlZcq-0001UP-37 for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlZcm-00015y-Cm for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:27 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id D127C80813; Fri, 30 Jan 2026 00:32:21 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-7YztNryO; Fri, 30 Jan 2026 00:32:21 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722341; bh=5mIy1CyhCgoPLn4Qcg9Hf6mr1MP5XtgStzgPYFDTSFk=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=OAtTixsXQ8bB7jHJ3Exg61YphqnHp6Ib/8ZVuvMq+YTlXKJEdeOgueg2tZl4AIYE8 y8MHrOpcAxKWOYuf7jtZMJScdmeup6UDzHrJJXkuXKNltqRlD9W4a/hzmVKZCaNilt 8nnOwAFGOKrEhzkEx6XjrLy8sOg/QrXwO2L4tLTY= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 03/12] net/tap: net_init_tap(): drop extra vhostfdname variable Date: Fri, 30 Jan 2026 00:32:05 +0300 Message-ID: <20260129213215.1405459-4-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722396712158500 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/net/tap.c b/net/tap.c index a389aec218..55b8b33ea8 100644 --- a/net/tap.c +++ b/net/tap.c @@ -822,14 +822,12 @@ int net_init_tap(const Netdev *netdev, const char *na= me, const NetdevTapOptions *tap; int fd, vnet_hdr =3D 0, i =3D 0, queues; /* for the no-fd, no-helper case */ - const char *vhostfdname; char ifname[128]; int ret =3D 0; =20 assert(netdev->type =3D=3D NET_CLIENT_DRIVER_TAP); tap =3D &netdev->u.tap; queues =3D tap->has_queues ? tap->queues : 1; - vhostfdname =3D tap->vhostfd; =20 /* QEMU hubs do not support multiqueue tap, in this case peer is set. * For -netdev, peer is always NULL. */ @@ -871,7 +869,7 @@ int net_init_tap(const Netdev *netdev, const char *name, =20 if (!net_init_tap_one(tap, peer, "tap", name, NULL, NULL, NULL, - vhostfdname, vnet_hdr, fd, errp)) { + tap->vhostfd, vnet_hdr, fd, errp)) { close(fd); return -1; } @@ -972,7 +970,7 @@ free_fail: } =20 if (!net_init_tap_one(tap, peer, "bridge", name, ifname, - NULL, NULL, vhostfdname, + NULL, NULL, tap->vhostfd, vnet_hdr, fd, errp)) { close(fd); return -1; @@ -1012,7 +1010,7 @@ free_fail: if (!net_init_tap_one(tap, peer, "tap", name, ifname, i >=3D 1 ? NULL : script, i >=3D 1 ? NULL : downscript, - vhostfdname, vnet_hdr, fd, errp)) { + tap->vhostfd, vnet_hdr, fd, errp)) { close(fd); return -1; } --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722379; cv=none; d=zohomail.com; s=zohoarc; b=iH5LH/sG+Mxoeug7aN+NHxbTl9p2EMHo29MqYEjBt7XiOpgskVygdF/JxhbXepH8HdbkkNXo6BhZqQDxx68JR4yU+Cg5Ejj38z9SakookNPfyVEzyuz/wtcvFq9+bYShWaQ8gde8OcBv1qB12DBelSQ2JeW2ooesEA4PxhsPDd0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722379; 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=i5eFvQ0MxbzUcT/0vb8vt3GzyP2XMPog1nxdutvP964=; b=UFkoCQyMVaKD7X/IxwjU7MNgCfBHeJlxSlEm82t2AKG5wTVSyoBTokPUOya/cYRMB0PZHmSbtD0E6T7ayETpslZWjF7bUEHRHbzRbCs7HOvDYFgCip7KLMRQmyEQBU672WqvPIrPsYRWXfFWwX3J2koAJoxgnA2f0ICSlZ6aBF8= 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 1769722379036741.2227801431826; Thu, 29 Jan 2026 13:32:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcs-0001Wu-Pf; Thu, 29 Jan 2026 16:32:30 -0500 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 1vlZcq-0001Ud-BQ for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900: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 1vlZcm-00017f-Ci for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 758A380818; Fri, 30 Jan 2026 00:32:22 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-vCtg7Wve; Fri, 30 Jan 2026 00:32:22 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722342; bh=i5eFvQ0MxbzUcT/0vb8vt3GzyP2XMPog1nxdutvP964=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=wsauAu4/O6qxQB4LYzPXVzwyAD8RwxuK6A6HciWR7AScHnhuegA/TUjJ6jQXs8Ww+ 8bUeQhqrw1xtu+SperUWgoztfBi0h7txh8UtsKQNteVn+eDi7aSHPrCUPr2ZasM/VA Nv7RwmxO1TKg0wfezLnGxRDoAZP2n3hi1QFNZZq0= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 04/12] net/tap: net_init_tap(): refactor parameter checking Date: Fri, 30 Jan 2026 00:32:06 +0300 Message-ID: <20260129213215.1405459-5-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722382701154100 Content-Type: text/plain; charset="utf-8" Move checks to the top of the function to simplify further refactoring. Merge duplicated checks. Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 53 +++++++++++++++++++++++------------------------------ 1 file changed, 23 insertions(+), 30 deletions(-) diff --git a/net/tap.c b/net/tap.c index 55b8b33ea8..331a779585 100644 --- a/net/tap.c +++ b/net/tap.c @@ -841,16 +841,30 @@ int net_init_tap(const Netdev *netdev, const char *na= me, return -1; } =20 - if (tap->fd) { - if (tap->ifname || tap->script || tap->downscript || - tap->has_vnet_hdr || tap->helper || tap->has_queues || - tap->fds || tap->vhostfds) { - error_setg(errp, "ifname=3D, script=3D, downscript=3D, vnet_hd= r=3D, " - "helper=3D, queues=3D, fds=3D, and vhostfds=3D " - "are invalid with fd=3D"); - return -1; - } + if (tap->has_queues + !!tap->helper + !!tap->fds + !!tap->fd > 1) { + error_setg(errp, "queues=3D, helper=3D, fds=3D and fd=3D are mutua= l exclusive"); + return -1; + } =20 + if ((tap->fd || tap->fds || tap->helper) && + (tap->ifname || tap->script || tap->downscript || + tap->has_vnet_hdr)) { + error_setg(errp, "ifname=3D, script=3D, downscript=3D, vnet_hdr=3D= " + "are invalid with fd=3D/fds=3D/helper=3D"); + return -1; + } + + if (tap->vhostfds && !tap->fds) { + error_setg(errp, "vhostfds=3D is invalid if fds=3D wasn't specifie= d"); + return -1; + } + + if (tap->vhostfd && tap->fds) { + error_setg(errp, "vhostfd=3D is invalid with fds=3D"); + return -1; + } + + if (tap->fd) { fd =3D monitor_fd_param(monitor_cur(), tap->fd, errp); if (fd =3D=3D -1) { return -1; @@ -878,15 +892,6 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, char **vhost_fds; int nfds =3D 0, nvhosts =3D 0; =20 - if (tap->ifname || tap->script || tap->downscript || - tap->has_vnet_hdr || tap->helper || tap->has_queues || - tap->vhostfd) { - error_setg(errp, "ifname=3D, script=3D, downscript=3D, vnet_hd= r=3D, " - "helper=3D, queues=3D, and vhostfd=3D " - "are invalid with fds=3D"); - return -1; - } - fds =3D g_new0(char *, MAX_TAP_QUEUES); vhost_fds =3D g_new0(char *, MAX_TAP_QUEUES); =20 @@ -946,13 +951,6 @@ free_fail: g_free(vhost_fds); return ret; } else if (tap->helper) { - if (tap->ifname || tap->script || tap->downscript || - tap->has_vnet_hdr || tap->has_queues || tap->vhostfds) { - error_setg(errp, "ifname=3D, script=3D, downscript=3D, vnet_hd= r=3D, " - "queues=3D, and vhostfds=3D are invalid with helper= =3D"); - return -1; - } - fd =3D net_bridge_run_helper(tap->helper, tap->br ?: DEFAULT_BRIDGE_INTERFACE, errp); @@ -981,11 +979,6 @@ free_fail: g_autofree char *downscript =3D tap_parse_script(tap->downscript, DEFAULT_NETWORK_DOWN_SCRIPT); =20 - if (tap->vhostfds) { - error_setg(errp, "vhostfds=3D is invalid if fds=3D wasn't spec= ified"); - return -1; - } - if (tap->ifname) { pstrcpy(ifname, sizeof ifname, tap->ifname); } else { --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722411; cv=none; d=zohomail.com; s=zohoarc; b=UIBixyQ56g06HWC0+waTmvizj1tLbf2EPQI2foUnR+qIZBJ85lHurnIHEGiWG74eZp/xn4tndCnUKLKVP7T4cN5Xll0jWgYsOXFbkVFwxPPnm2r5US7Dz/qEDloJkD0i431Nj/vIDtYpWhesFTCZDbfeMGzQrc43JvXU2IIMbD8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722411; 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=zkwUUASolEhVxvg1YgpDo8GiYqPwUnrSrAAlmje9B6M=; b=BkFRcsmO2Ht4V0Hf3Ie5neyRZ3KxqJHlp1TYl5tCs1g3AfmVcyGjvqMVD6Sj7M1Z7ob7hwZgMQvauf4W0vPd5Qu8e3geDJ/2YPjSvtXYWNxbU8G09SSePkUv2yGhC4kR79gTtbeej4n9oO49aLrcfXJq84xSrw5JHxazNOAE+Nc= 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 1769722411571614.9545475218343; Thu, 29 Jan 2026 13:33:31 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcr-0001W3-FB; Thu, 29 Jan 2026 16:32:29 -0500 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 1vlZco-0001U9-Tp for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:26 -0500 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900: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 1vlZcm-00018o-Ir for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:26 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 2AC8680825; Fri, 30 Jan 2026 00:32:23 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-3ZXUz4Kh; Fri, 30 Jan 2026 00:32:22 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722342; bh=zkwUUASolEhVxvg1YgpDo8GiYqPwUnrSrAAlmje9B6M=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=Ao6f1w+c7YKzH8QUUARhwPy6eO1f7LJ6hpejuAkixwebJcsY1giR5aaEevTrBNUVE 7MyD0ANH+CPbdNKTbqHgl/pMoiocwyOI/+UR7cguEp4CiBE1yaKZ3EAcMpUgEp9dTX 9XcqPi7OIkBp79wg5mywWgwRB7hOvByF2hfnK8Bk= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 05/12] net/tap: net_init_tap(): common fail label Date: Fri, 30 Jan 2026 00:32:07 +0300 Message-ID: <20260129213215.1405459-6-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722412588158500 Content-Type: text/plain; charset="utf-8" Add common failure label. This: - simplifies failure paths in the function - get rid of unusual free_fail: in the middle of the function - simplify further refactoring Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 84 ++++++++++++++++++++++++------------------------------- 1 file changed, 37 insertions(+), 47 deletions(-) diff --git a/net/tap.c b/net/tap.c index 331a779585..2eb8a2caeb 100644 --- a/net/tap.c +++ b/net/tap.c @@ -820,10 +820,12 @@ int net_init_tap(const Netdev *netdev, const char *na= me, NetClientState *peer, Error **errp) { const NetdevTapOptions *tap; - int fd, vnet_hdr =3D 0, i =3D 0, queues; + int fd =3D -1, vnet_hdr =3D 0, i =3D 0, queues; /* for the no-fd, no-helper case */ char ifname[128]; - int ret =3D 0; + char **fds =3D NULL, **vhost_fds =3D NULL; + int nfds =3D 0, nvhosts =3D 0; + =20 assert(netdev->type =3D=3D NET_CLIENT_DRIVER_TAP); tap =3D &netdev->u.tap; @@ -867,31 +869,24 @@ int net_init_tap(const Netdev *netdev, const char *na= me, if (tap->fd) { fd =3D monitor_fd_param(monitor_cur(), tap->fd, errp); if (fd =3D=3D -1) { - return -1; + goto fail; } =20 if (!qemu_set_blocking(fd, false, errp)) { - close(fd); - return -1; + goto fail; } =20 vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); if (vnet_hdr < 0) { - close(fd); - return -1; + goto fail; } =20 if (!net_init_tap_one(tap, peer, "tap", name, NULL, NULL, NULL, tap->vhostfd, vnet_hdr, fd, errp)) { - close(fd); - return -1; + goto fail; } } else if (tap->fds) { - char **fds; - char **vhost_fds; - int nfds =3D 0, nvhosts =3D 0; - fds =3D g_new0(char *, MAX_TAP_QUEUES); vhost_fds =3D g_new0(char *, MAX_TAP_QUEUES); =20 @@ -901,77 +896,58 @@ int net_init_tap(const Netdev *netdev, const char *na= me, if (nfds !=3D nvhosts) { error_setg(errp, "The number of fds passed does not match " "the number of vhostfds passed"); - ret =3D -1; - goto free_fail; + goto fail; } } =20 for (i =3D 0; i < nfds; i++) { fd =3D monitor_fd_param(monitor_cur(), fds[i], errp); if (fd =3D=3D -1) { - ret =3D -1; - goto free_fail; + goto fail; } =20 if (!qemu_set_blocking(fd, false, errp)) { - ret =3D -1; - goto free_fail; + goto fail; } =20 if (i =3D=3D 0) { vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); if (vnet_hdr < 0) { - ret =3D -1; - goto free_fail; + goto fail; } } else if (vnet_hdr !=3D tap_probe_vnet_hdr(fd, NULL)) { error_setg(errp, "vnet_hdr not consistent across given tap fds"); - ret =3D -1; - goto free_fail; + goto fail; } =20 if (!net_init_tap_one(tap, peer, "tap", name, ifname, NULL, NULL, tap->vhostfds ? vhost_fds[i] : NULL, vnet_hdr, fd, errp)) { - ret =3D -1; - goto free_fail; + goto fail; } } - -free_fail: - for (i =3D 0; i < nvhosts; i++) { - g_free(vhost_fds[i]); - } - for (i =3D 0; i < nfds; i++) { - g_free(fds[i]); - } - g_free(fds); - g_free(vhost_fds); - return ret; } else if (tap->helper) { fd =3D net_bridge_run_helper(tap->helper, tap->br ?: DEFAULT_BRIDGE_INTERFACE, errp); if (fd =3D=3D -1) { - return -1; + goto fail; } =20 if (!qemu_set_blocking(fd, false, errp)) { - return -1; + goto fail; } vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); if (vnet_hdr < 0) { - close(fd); - return -1; + goto fail; } =20 if (!net_init_tap_one(tap, peer, "bridge", name, ifname, NULL, NULL, tap->vhostfd, vnet_hdr, fd, errp)) { - close(fd); - return -1; + goto fail; } } else { g_autofree char *script =3D @@ -989,14 +965,13 @@ free_fail: fd =3D net_tap_init(tap, &vnet_hdr, i >=3D 1 ? NULL : script, ifname, sizeof ifname, queues > 1, errp); if (fd =3D=3D -1) { - return -1; + goto fail; } =20 if (queues > 1 && i =3D=3D 0 && !tap->ifname) { if (tap_fd_get_ifname(fd, ifname)) { error_setg(errp, "Fail to get ifname"); - close(fd); - return -1; + goto fail; } } =20 @@ -1004,13 +979,28 @@ free_fail: i >=3D 1 ? NULL : script, i >=3D 1 ? NULL : downscript, tap->vhostfd, vnet_hdr, fd, errp)) { - close(fd); - return -1; + goto fail; } } } =20 return 0; + +fail: + close(fd); + if (vhost_fds) { + for (i =3D 0; i < nvhosts; i++) { + g_free(vhost_fds[i]); + } + g_free(vhost_fds); + } + if (fds) { + for (i =3D 0; i < nfds; i++) { + g_free(fds[i]); + } + g_free(fds); + } + return -1; } =20 int tap_enable(NetClientState *nc) --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722436; cv=none; d=zohomail.com; s=zohoarc; b=Cv8e2ju1o6RAWpMrY9sGvDhbe63cbjQ22AbsG692TBz0lTFX06uL1uxhyGj4pL9w2G/Q0BP9Zz7yXrl60iloBh6q/fbbql48owlj/GOh2hn1+wqaByPPOV9KIcZTKXFx5NJQqg5/G1ffWUiqHaNPayQgaRdC/VznaRZXPf6QRiw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722436; 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=1LHoJ5DJvDzwJvSX0/dnBSGc1kLmBrli5OwBikWNfk8=; b=J4kWacTPYOBJURrSio9K//2X+r3f+eaomeimSCSJeQpPdFx+EtV075+W65HtUU+RRzstbGtVWjxlLvAdfGe2AsC5CExtspvJh9bID9kdVva/rhawqfGR0E937nb1VWBAFqqPddUyJq3cQMzbBBPSmKYdB1U1FlYddsIDh9iW3nE= 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 1769722436414121.64300690806283; Thu, 29 Jan 2026 13:33:56 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcu-0001ac-TK; Thu, 29 Jan 2026 16:32:32 -0500 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 1vlZcq-0001Um-Fx for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900: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 1vlZcn-00018u-3r for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:28 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id CF51D80800; Fri, 30 Jan 2026 00:32:23 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-EUcszAX5; Fri, 30 Jan 2026 00:32:23 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722343; bh=1LHoJ5DJvDzwJvSX0/dnBSGc1kLmBrli5OwBikWNfk8=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=vw19j9kPGMToa9DKget9PO9allm9Nxtmy0rsAKM5XlJ/FpqP2NW4dBPD3meGmhTWp 7zv0w2ZpYcYx7vjyj7nuDPyB2g0j3O8gcGSg96lNg8fAxWLkPUi5bWN6/edbUE7gS3 pwt2b2A7k11QkmRIM/R2QEXrix/L+oLtRBUvdr4Y= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 06/12] net/tap: net_init_tap_one() refactor to get vhostfd param Date: Fri, 30 Jan 2026 00:32:08 +0300 Message-ID: <20260129213215.1405459-7-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722438741154100 Content-Type: text/plain; charset="utf-8" Get vhostfd instead of vhostfdname: - more symmetry with fd param - prepare to further changes Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/net/tap.c b/net/tap.c index 2eb8a2caeb..2c5f8e73fe 100644 --- a/net/tap.c +++ b/net/tap.c @@ -706,11 +706,10 @@ static int net_tap_init(const NetdevTapOptions *tap, = int *vnet_hdr, static bool net_init_tap_one(const NetdevTapOptions *tap, NetClientState *= peer, const char *model, const char *name, const char *ifname, const char *script, - const char *downscript, const char *vhostfdna= me, + const char *downscript, int vhostfd, int vnet_hdr, int fd, Error **errp) { TAPState *s =3D net_tap_fd_init(peer, model, name, fd, vnet_hdr); - int vhostfd; bool sndbuf_required =3D tap->has_sndbuf; int sndbuf =3D (tap->has_sndbuf && tap->sndbuf) ? MIN(tap->sndbuf, INT_MAX) : INT= _MAX; @@ -738,7 +737,7 @@ static bool net_init_tap_one(const NetdevTapOptions *ta= p, NetClientState *peer, } =20 if (tap->has_vhost ? tap->vhost : - vhostfdname || (tap->has_vhostforce && tap->vhostforce)) { + (vhostfd !=3D -1) || (tap->has_vhostforce && tap->vhostforce)) { VhostNetOptions options; =20 options.backend_type =3D VHOST_BACKEND_TYPE_KERNEL; @@ -749,15 +748,7 @@ static bool net_init_tap_one(const NetdevTapOptions *t= ap, NetClientState *peer, options.busyloop_timeout =3D 0; } =20 - if (vhostfdname) { - vhostfd =3D monitor_fd_param(monitor_cur(), vhostfdname, errp); - if (vhostfd =3D=3D -1) { - goto failed; - } - if (!qemu_set_blocking(vhostfd, false, errp)) { - goto failed; - } - } else { + if (vhostfd =3D=3D -1) { vhostfd =3D open("/dev/vhost-net", O_RDWR); if (vhostfd < 0) { error_setg_file_open(errp, errno, "/dev/vhost-net"); @@ -820,7 +811,7 @@ int net_init_tap(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { const NetdevTapOptions *tap; - int fd =3D -1, vnet_hdr =3D 0, i =3D 0, queues; + int fd =3D -1, vhostfd =3D -1, vnet_hdr =3D 0, i =3D 0, queues; /* for the no-fd, no-helper case */ char ifname[128]; char **fds =3D NULL, **vhost_fds =3D NULL; @@ -866,6 +857,17 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, return -1; } =20 + if (tap->vhostfd) { + vhostfd =3D monitor_fd_param(monitor_cur(), tap->vhostfd, errp); + if (vhostfd =3D=3D -1) { + return -1; + } + + if (!qemu_set_blocking(vhostfd, false, errp)) { + goto fail; + } + } + if (tap->fd) { fd =3D monitor_fd_param(monitor_cur(), tap->fd, errp); if (fd =3D=3D -1) { @@ -883,7 +885,7 @@ int net_init_tap(const Netdev *netdev, const char *name, =20 if (!net_init_tap_one(tap, peer, "tap", name, NULL, NULL, NULL, - tap->vhostfd, vnet_hdr, fd, errp)) { + vhostfd, vnet_hdr, fd, errp)) { goto fail; } } else if (tap->fds) { @@ -910,6 +912,17 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, goto fail; } =20 + if (tap->vhostfds) { + vhostfd =3D monitor_fd_param(monitor_cur(), vhost_fds[i], = errp); + if (vhostfd =3D=3D -1) { + goto fail; + } + + if (!qemu_set_blocking(vhostfd, false, errp)) { + goto fail; + } + } + if (i =3D=3D 0) { vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); if (vnet_hdr < 0) { @@ -923,7 +936,7 @@ int net_init_tap(const Netdev *netdev, const char *name, =20 if (!net_init_tap_one(tap, peer, "tap", name, ifname, NULL, NULL, - tap->vhostfds ? vhost_fds[i] : NULL, + vhostfd, vnet_hdr, fd, errp)) { goto fail; } @@ -945,7 +958,7 @@ int net_init_tap(const Netdev *netdev, const char *name, } =20 if (!net_init_tap_one(tap, peer, "bridge", name, ifname, - NULL, NULL, tap->vhostfd, + NULL, NULL, vhostfd, vnet_hdr, fd, errp)) { goto fail; } @@ -978,7 +991,7 @@ int net_init_tap(const Netdev *netdev, const char *name, if (!net_init_tap_one(tap, peer, "tap", name, ifname, i >=3D 1 ? NULL : script, i >=3D 1 ? NULL : downscript, - tap->vhostfd, vnet_hdr, fd, errp)) { + vhostfd, vnet_hdr, fd, errp)) { goto fail; } } @@ -988,6 +1001,7 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, =20 fail: close(fd); + close(vhostfd); if (vhost_fds) { for (i =3D 0; i < nvhosts; i++) { g_free(vhost_fds[i]); --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722415; cv=none; d=zohomail.com; s=zohoarc; b=XT85ZuG6keS9SNI4K/9j/OX4GE7utteVGyRSNRzJPlIDxhanlDQDi1NRlFYBnDq64rPYCNtO7zTOvWdeDaOmHDieLBjQyKnlb80epgyrzKJoYl0RUV3GmBctfG8Ogovb5ORnU3BgkvTYpDh9cptFoTvKuAd2yz/pI+teLWAiMl8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722415; 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=BDiEM5hFQxkhlp+sUNQkEBGuisXIqaX1d5OB08sKy8A=; b=G5mwUY//jKRdGHG79QA308AU/lYzoXII/ATgsqoZAFOiHdC8E7W77JY4gHHPFXVBoAGUnt1hWISr7J2kG0B1i4ErKDnG0HgfIP106bvtUt/777DYDDY6wLKXEM6NFoszzboaVOWl0H/HteMqdXxS0ZDiYVkoc2Ks8PlaVZDtPNU= 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 1769722414662287.0444425047042; Thu, 29 Jan 2026 13:33:34 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcs-0001Wm-CM; Thu, 29 Jan 2026 16:32:30 -0500 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 1vlZcr-0001W4-Ch for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlZcn-000193-Qs for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 843CB8082A; Fri, 30 Jan 2026 00:32:24 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-Tay6iODv; Fri, 30 Jan 2026 00:32:24 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722344; bh=BDiEM5hFQxkhlp+sUNQkEBGuisXIqaX1d5OB08sKy8A=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=DJg5ySPzjMdoyYWx5HQ3MfGS4sV3nu3O/+mFMBOQJYDEMNGeVGM/PPtv79wclw9Qk tErakkMlLojAsUkJM7zayfddzxywKQOpYqeCZjPrS/UZ6TY6BmckW4yvsMkeMkoJOR dT42GieYzopPGUQQfmUKbddBhx71tQArZ6lx6EV4= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 07/12] net/tap: net_init_tap_one(): drop model parameter Date: Fri, 30 Jan 2026 00:32:09 +0300 Message-ID: <20260129213215.1405459-8-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722418374154100 Content-Type: text/plain; charset="utf-8" It could be simply derived from tap parameter. And this change simplifies further refactoring. Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/net/tap.c b/net/tap.c index 2c5f8e73fe..db3fe380a4 100644 --- a/net/tap.c +++ b/net/tap.c @@ -704,12 +704,13 @@ static int net_tap_init(const NetdevTapOptions *tap, = int *vnet_hdr, #define MAX_TAP_QUEUES 1024 =20 static bool net_init_tap_one(const NetdevTapOptions *tap, NetClientState *= peer, - const char *model, const char *name, + const char *name, const char *ifname, const char *script, const char *downscript, int vhostfd, int vnet_hdr, int fd, Error **errp) { - TAPState *s =3D net_tap_fd_init(peer, model, name, fd, vnet_hdr); + TAPState *s =3D net_tap_fd_init(peer, tap->helper ? "bridge" : "tap", + name, fd, vnet_hdr); bool sndbuf_required =3D tap->has_sndbuf; int sndbuf =3D (tap->has_sndbuf && tap->sndbuf) ? MIN(tap->sndbuf, INT_MAX) : INT= _MAX; @@ -883,7 +884,7 @@ int net_init_tap(const Netdev *netdev, const char *name, goto fail; } =20 - if (!net_init_tap_one(tap, peer, "tap", name, NULL, + if (!net_init_tap_one(tap, peer, name, NULL, NULL, NULL, vhostfd, vnet_hdr, fd, errp)) { goto fail; @@ -934,7 +935,7 @@ int net_init_tap(const Netdev *netdev, const char *name, goto fail; } =20 - if (!net_init_tap_one(tap, peer, "tap", name, ifname, + if (!net_init_tap_one(tap, peer, name, ifname, NULL, NULL, vhostfd, vnet_hdr, fd, errp)) { @@ -957,7 +958,7 @@ int net_init_tap(const Netdev *netdev, const char *name, goto fail; } =20 - if (!net_init_tap_one(tap, peer, "bridge", name, ifname, + if (!net_init_tap_one(tap, peer, name, ifname, NULL, NULL, vhostfd, vnet_hdr, fd, errp)) { goto fail; @@ -988,7 +989,7 @@ int net_init_tap(const Netdev *netdev, const char *name, } } =20 - if (!net_init_tap_one(tap, peer, "tap", name, ifname, + if (!net_init_tap_one(tap, peer, name, ifname, i >=3D 1 ? NULL : script, i >=3D 1 ? NULL : downscript, vhostfd, vnet_hdr, fd, errp)) { --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722406; cv=none; d=zohomail.com; s=zohoarc; b=SSF9ZUkNbp4hSYhV42r1VHXqCoW+g1wYiVD/IIX0PWYtd6U8ly0bfpcV1GPnUYHoiDPHSz1HV2hMtj3d+aZxjjGM6tawb1z4hHbV06wUBELIyPhsrPCxtT5LYT6jRk+hUkIcfWEy7gMeooIb391Td4BsSdqF/xMiUO8MiTnFM+A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722406; 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=MdhRO8ay11qNRZxu2Su8doEirPm+0Eno6AxS/wDhAEc=; b=bsr0ylE8hcl6Odv16rCxW1d3GXKM4G4+Wpt3h4lW8iqecYWA7Ut0ZrhIZrRBew/g5P9NU9Opu0S93Cozs+IfMRhvbq+IQILuNtWHdldZ6VVzAjhSwY1D+u+ZHfLIUAkJi61tkPWBNrcZoUWagYttC9+cqe0o9KtKVlNOLZR+FEQ= 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 1769722406035433.2642845380741; Thu, 29 Jan 2026 13:33:26 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcv-0001by-Ne; Thu, 29 Jan 2026 16:32:33 -0500 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 1vlZcr-0001WC-PM for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlZco-00019I-KD for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 4F82F8082D; Fri, 30 Jan 2026 00:32:25 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-C6UeA9Bw; Fri, 30 Jan 2026 00:32:24 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722344; bh=MdhRO8ay11qNRZxu2Su8doEirPm+0Eno6AxS/wDhAEc=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=VIt7Uy1DPNSQbPbLSn2DspYruo0fyvC6/rFkXAXzAK4DOX8wYo2d2EoX2P9y5IGPj 0JJidmO7UQY3EhxbD5EVTp5Thg0hJrbnvIkD9MVkJxQwv5Yix5QBPON6Ss99dSUdtk YIiuWa+fZRhWlNErG09QjXLNWThuMzYcKYDdLsb4= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru, Ilya Maximets Subject: [PATCH v2 08/12] net: introduce net_parse_fds() Date: Fri, 30 Jan 2026 00:32:10 +0300 Message-ID: <20260129213215.1405459-9-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722410786154100 Content-Type: text/plain; charset="utf-8" Add common net_parse_fds() and net_free_fds() helpers and use them in tap.c and af-xdp.c. Choose returning queues instead of fds, because we'll have derived helper in net/tap, which will be able to return fds=3DNULL and non-zero queues on success. That's also why we move to INT_MAX for queues, to support negative return value for net_parse_fds() (for failure paths). Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/af-xdp.c | 35 ++------------------ net/tap.c | 90 +++++++++++----------------------------------------- net/util.c | 50 +++++++++++++++++++++++++++++ net/util.h | 14 ++++++++ 4 files changed, 86 insertions(+), 103 deletions(-) diff --git a/net/af-xdp.c b/net/af-xdp.c index bb7a7d8e33..80cda89b0e 100644 --- a/net/af-xdp.c +++ b/net/af-xdp.c @@ -21,6 +21,7 @@ #include "clients.h" #include "monitor/monitor.h" #include "net/net.h" +#include "net/util.h" #include "qapi/error.h" #include "qemu/cutils.h" #include "qemu/error-report.h" @@ -441,35 +442,6 @@ static NetClientInfo net_af_xdp_info =3D { .cleanup =3D af_xdp_cleanup, }; =20 -static int *parse_socket_fds(const char *sock_fds_str, - unsigned n_expected, Error **errp) -{ - gchar **substrings =3D g_strsplit(sock_fds_str, ":", -1); - unsigned i, n_sock_fds =3D g_strv_length(substrings); - int *sock_fds =3D NULL; - - if (n_sock_fds !=3D n_expected) { - error_setg(errp, "expected %u socket fds, got %u", - n_expected, n_sock_fds); - goto exit; - } - - sock_fds =3D g_new(int, n_sock_fds); - - for (i =3D 0; i < n_sock_fds; i++) { - sock_fds[i] =3D monitor_fd_param(monitor_cur(), substrings[i], err= p); - if (sock_fds[i] < 0) { - g_free(sock_fds); - sock_fds =3D NULL; - goto exit; - } - } - -exit: - g_strfreev(substrings); - return sock_fds; -} - /* * The exported init function. * @@ -496,7 +468,7 @@ int net_init_af_xdp(const Netdev *netdev, return -1; } =20 - if (opts->has_queues && (opts->queues < 0 || opts->queues > UINT_MAX))= { + if (opts->has_queues && (opts->queues < 0 || opts->queues > INT_MAX)) { error_setg(errp, "invalid number of queues (%" PRIi64 ") for '%s'", opts->queues, opts->ifname); return -1; @@ -530,8 +502,7 @@ int net_init_af_xdp(const Netdev *netdev, } =20 if (opts->sock_fds) { - sock_fds =3D parse_socket_fds(opts->sock_fds, queues, errp); - if (!sock_fds) { + if (net_parse_fds(opts->sock_fds, &sock_fds, queues, errp) < 0) { return -1; } } diff --git a/net/tap.c b/net/tap.c index db3fe380a4..883572cdda 100644 --- a/net/tap.c +++ b/net/tap.c @@ -45,6 +45,7 @@ #include "hw/virtio/vhost.h" =20 #include "net/tap.h" +#include "net/util.h" =20 #include "net/vhost_net.h" =20 @@ -782,32 +783,6 @@ failed: return false; } =20 -static int get_fds(char *str, char *fds[], int max) -{ - char *ptr =3D str, *this; - size_t len =3D strlen(str); - int i =3D 0; - - while (i < max && ptr < str + len) { - this =3D strchr(ptr, ':'); - - if (this =3D=3D NULL) { - fds[i] =3D g_strdup(ptr); - } else { - fds[i] =3D g_strndup(ptr, this - ptr); - } - - i++; - if (this =3D=3D NULL) { - break; - } else { - ptr =3D this + 1; - } - } - - return i; -} - int net_init_tap(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { @@ -815,9 +790,7 @@ int net_init_tap(const Netdev *netdev, const char *name, int fd =3D -1, vhostfd =3D -1, vnet_hdr =3D 0, i =3D 0, queues; /* for the no-fd, no-helper case */ char ifname[128]; - char **fds =3D NULL, **vhost_fds =3D NULL; - int nfds =3D 0, nvhosts =3D 0; - + int *fds =3D NULL, *vhost_fds =3D NULL; =20 assert(netdev->type =3D=3D NET_CLIENT_DRIVER_TAP); tap =3D &netdev->u.tap; @@ -890,46 +863,31 @@ int net_init_tap(const Netdev *netdev, const char *na= me, goto fail; } } else if (tap->fds) { - fds =3D g_new0(char *, MAX_TAP_QUEUES); - vhost_fds =3D g_new0(char *, MAX_TAP_QUEUES); - - nfds =3D get_fds(tap->fds, fds, MAX_TAP_QUEUES); - if (tap->vhostfds) { - nvhosts =3D get_fds(tap->vhostfds, vhost_fds, MAX_TAP_QUEUES); - if (nfds !=3D nvhosts) { - error_setg(errp, "The number of fds passed does not match " - "the number of vhostfds passed"); - goto fail; - } + queues =3D net_parse_fds(tap->fds, &fds, 0, errp); + if (queues < 0) { + goto fail; } =20 - for (i =3D 0; i < nfds; i++) { - fd =3D monitor_fd_param(monitor_cur(), fds[i], errp); - if (fd =3D=3D -1) { - goto fail; - } + if (tap->vhostfds && net_parse_fds(tap->vhostfds, &vhost_fds, + queues, errp) < 0) { + goto fail; + } =20 - if (!qemu_set_blocking(fd, false, errp)) { + for (i =3D 0; i < queues; i++) { + if (!qemu_set_blocking(fds[i], false, errp)) { goto fail; } =20 - if (tap->vhostfds) { - vhostfd =3D monitor_fd_param(monitor_cur(), vhost_fds[i], = errp); - if (vhostfd =3D=3D -1) { - goto fail; - } - - if (!qemu_set_blocking(vhostfd, false, errp)) { - goto fail; - } + if (vhost_fds && !qemu_set_blocking(vhost_fds[i], false, errp)= ) { + goto fail; } =20 if (i =3D=3D 0) { - vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); + vnet_hdr =3D tap_probe_vnet_hdr(fds[i], errp); if (vnet_hdr < 0) { goto fail; } - } else if (vnet_hdr !=3D tap_probe_vnet_hdr(fd, NULL)) { + } else if (vnet_hdr !=3D tap_probe_vnet_hdr(fds[i], NULL)) { error_setg(errp, "vnet_hdr not consistent across given tap fds"); goto fail; @@ -937,8 +895,8 @@ int net_init_tap(const Netdev *netdev, const char *name, =20 if (!net_init_tap_one(tap, peer, name, ifname, NULL, NULL, - vhostfd, - vnet_hdr, fd, errp)) { + vhost_fds ? vhost_fds[i] : -1, + vnet_hdr, fds[i], errp)) { goto fail; } } @@ -1003,18 +961,8 @@ int net_init_tap(const Netdev *netdev, const char *na= me, fail: close(fd); close(vhostfd); - if (vhost_fds) { - for (i =3D 0; i < nvhosts; i++) { - g_free(vhost_fds[i]); - } - g_free(vhost_fds); - } - if (fds) { - for (i =3D 0; i < nfds; i++) { - g_free(fds[i]); - } - g_free(fds); - } + net_free_fds(fds, queues); + net_free_fds(vhost_fds, queues); return -1; } =20 diff --git a/net/util.c b/net/util.c index 0b3dbfe5d3..1998a6554e 100644 --- a/net/util.c +++ b/net/util.c @@ -23,6 +23,8 @@ */ =20 #include "qemu/osdep.h" +#include "monitor/monitor.h" +#include "qapi/error.h" #include "util.h" =20 int net_parse_macaddr(uint8_t *macaddr, const char *p) @@ -57,3 +59,51 @@ int net_parse_macaddr(uint8_t *macaddr, const char *p) =20 return 0; } + +void net_free_fds(int *fds, int nfds) +{ + int i; + + if (!fds || nfds <=3D 0) { + return; + } + + for (i =3D 0; i < nfds; i++) { + if (fds[i] !=3D -1) { + close(fds[i]); + } + } + + g_free(fds); +} + +int net_parse_fds(const char *fds_param, int **fds, int expected_nfds, + Error **errp) +{ + g_auto(GStrv) fdnames =3D g_strsplit(fds_param, ":", -1); + unsigned nfds =3D g_strv_length(fdnames); + int i; + + if (nfds > INT_MAX) { + error_setg(errp, "fds parameter exceeds maximum of %d", INT_MAX); + return -1; + } + + if (expected_nfds && nfds !=3D expected_nfds) { + error_setg(errp, "expected %u socket fds, got %u", expected_nfds, = nfds); + return -1; + } + + *fds =3D g_new(int, nfds); + + for (i =3D 0; i < nfds; i++) { + (*fds)[i] =3D monitor_fd_param(monitor_cur(), fdnames[i], errp); + if ((*fds)[i] =3D=3D -1) { + net_free_fds(*fds, i); + *fds =3D NULL; + return -1; + } + } + + return nfds; +} diff --git a/net/util.h b/net/util.h index 288312979f..4dbc5d416d 100644 --- a/net/util.h +++ b/net/util.h @@ -83,4 +83,18 @@ static inline bool in6_equal_net(const struct in6_addr *= a, =20 int net_parse_macaddr(uint8_t *macaddr, const char *p); =20 +/* + * Close all @fds and free @fds itself + */ +void net_free_fds(int *fds, int nfds); + +/* + * Parse @fds_param, where monitor fds are separated by a colon. + * @nfds must be non-NULL. If *@nfds is zero - set it accordingly. + * If *@nfds is non-zero - check that we have exactly *@nfds fds + * and fail otherwise. + */ +int net_parse_fds(const char *fds_param, int **fds, int expected_nfds, + Error **errp); + #endif /* QEMU_NET_UTIL_H */ --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722416; cv=none; d=zohomail.com; s=zohoarc; b=JzSq1jDG0nfVrQ5IZHlDk2bMiSaJ42MqpJCQBrnOFc3br4bCziC5VdwezHNKS7yVcaH6YUs8eDGU7Jl2RfXzSr+l1PGwtD8iRejQnXPD8JeECPOXTpspsnGXCa2iKMx3I2uXskNeMzq3sqwYa5h3W8Vnr/T3GxxBXMJtRkI7Tck= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722416; 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=4Sk0u0b1f0O4jSKRi8ub6puWTSawxmhIEilzYfRNx14=; b=Hp8bhWVLt30pCNlzkxWYa3Gv38tQZCm9qNX19lLZWgSVRhDjb041uJtFBsRlJRknKVtnLWlGMMKp13m0U66dY71fSiaE7gNzTeLOHgoK8FthyHkgOxLfUukok6+7MdNy+lnAsQJKWcsu0dCDZoLk+kfzhDQBuvBfDwolIwkOoLo= 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 1769722416152215.76705147275777; Thu, 29 Jan 2026 13:33:36 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcu-0001aX-Tw; Thu, 29 Jan 2026 16:32:32 -0500 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 1vlZcr-0001WF-Po for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlZcp-00019N-8R for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id EF0F980808; Fri, 30 Jan 2026 00:32:25 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-mv83y6pd; Fri, 30 Jan 2026 00:32:25 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722345; bh=4Sk0u0b1f0O4jSKRi8ub6puWTSawxmhIEilzYfRNx14=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=m2ngTxQEwLAxUox6L14SgGG3eDz3kM/wen+JhjESqahJ/0VjRj0mTBSZvZqtpi092 qHr9zOXgmk72cw4S7+M1k4WhJFNw7Xg+s7HMuZHiAr0M4ey60nctuBtw/mWW+9c/U5 8j3DaH76gGDbUNbMU+SE+y7Aaxi9wSzzqCKj2vGo= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 09/12] net/tap: move fds parameters handling to separate functions Date: Fri, 30 Jan 2026 00:32:11 +0300 Message-ID: <20260129213215.1405459-10-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722418417158500 Content-Type: text/plain; charset="utf-8" This significantly simplify the code in net_init_tap(). Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 99 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 65 insertions(+), 34 deletions(-) diff --git a/net/tap.c b/net/tap.c index 883572cdda..dbbbe3c500 100644 --- a/net/tap.c +++ b/net/tap.c @@ -783,6 +783,61 @@ failed: return false; } =20 +static bool unblock_fds(int *fds, unsigned nfds, Error **errp) +{ + for (unsigned i =3D 0; i < nfds; i++) { + if (!qemu_set_blocking(fds[i], false, errp)) { + return false; + } + } + + return true; +} + +static int tap_parse_fds_and_queues(const NetdevTapOptions *tap, int **fds, + Error **errp) +{ + unsigned queues; + + if (tap->has_queues + !!tap->helper + !!tap->fds + !!tap->fd > 1) { + error_setg(errp, "queues=3D, helper=3D, fds=3D and fd=3D are mutua= l exclusive"); + return -1; + } + + if (tap->has_queues) { + if (tap->queues > INT_MAX) { + error_setg(errp, "queues exceeds maximum %d", INT_MAX); + return -1; + } + queues =3D tap->queues; + *fds =3D NULL; + } else if (tap->fd || tap->fds) { + queues =3D net_parse_fds(tap->fd ?: tap->fds, fds, + tap->fd ? 1 : 0, errp); + if (!*fds) { + return -1; + } + } else if (tap->helper) { + int fd =3D net_bridge_run_helper(tap->helper, + tap->br ?: DEFAULT_BRIDGE_INTERFACE, + errp); + if (fd < 0) { + return -1; + } + + queues =3D 1; + *fds =3D g_new(int, 1); + **fds =3D fd; + } + + if (*fds && !unblock_fds(*fds, queues, errp)) { + net_free_fds(*fds, queues); + return -1; + } + + return queues; +} + int net_init_tap(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { @@ -794,7 +849,6 @@ int net_init_tap(const Netdev *netdev, const char *name, =20 assert(netdev->type =3D=3D NET_CLIENT_DRIVER_TAP); tap =3D &netdev->u.tap; - queues =3D tap->has_queues ? tap->queues : 1; =20 /* QEMU hubs do not support multiqueue tap, in this case peer is set. * For -netdev, peer is always NULL. */ @@ -831,10 +885,15 @@ int net_init_tap(const Netdev *netdev, const char *na= me, return -1; } =20 + queues =3D tap_parse_fds_and_queues(tap, &fds, errp); + if (queues < 0) { + return -1; + } + if (tap->vhostfd) { vhostfd =3D monitor_fd_param(monitor_cur(), tap->vhostfd, errp); if (vhostfd =3D=3D -1) { - return -1; + goto fail; } =20 if (!qemu_set_blocking(vhostfd, false, errp)) { @@ -843,41 +902,23 @@ int net_init_tap(const Netdev *netdev, const char *na= me, } =20 if (tap->fd) { - fd =3D monitor_fd_param(monitor_cur(), tap->fd, errp); - if (fd =3D=3D -1) { - goto fail; - } - - if (!qemu_set_blocking(fd, false, errp)) { - goto fail; - } - - vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); + vnet_hdr =3D tap_probe_vnet_hdr(fds[0], errp); if (vnet_hdr < 0) { goto fail; } =20 if (!net_init_tap_one(tap, peer, name, NULL, NULL, NULL, - vhostfd, vnet_hdr, fd, errp)) { + vhostfd, vnet_hdr, fds[0], errp)) { goto fail; } } else if (tap->fds) { - queues =3D net_parse_fds(tap->fds, &fds, 0, errp); - if (queues < 0) { - goto fail; - } - if (tap->vhostfds && net_parse_fds(tap->vhostfds, &vhost_fds, queues, errp) < 0) { goto fail; } =20 for (i =3D 0; i < queues; i++) { - if (!qemu_set_blocking(fds[i], false, errp)) { - goto fail; - } - if (vhost_fds && !qemu_set_blocking(vhost_fds[i], false, errp)= ) { goto fail; } @@ -901,24 +942,14 @@ int net_init_tap(const Netdev *netdev, const char *na= me, } } } else if (tap->helper) { - fd =3D net_bridge_run_helper(tap->helper, - tap->br ?: DEFAULT_BRIDGE_INTERFACE, - errp); - if (fd =3D=3D -1) { - goto fail; - } - - if (!qemu_set_blocking(fd, false, errp)) { - goto fail; - } - vnet_hdr =3D tap_probe_vnet_hdr(fd, errp); + vnet_hdr =3D tap_probe_vnet_hdr(fds[0], errp); if (vnet_hdr < 0) { goto fail; } =20 if (!net_init_tap_one(tap, peer, name, ifname, NULL, NULL, vhostfd, - vnet_hdr, fd, errp)) { + vnet_hdr, fds[0], errp)) { goto fail; } } else { --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722477; cv=none; d=zohomail.com; s=zohoarc; b=Uthr5+hUHRAH+TbfoLyrVBrcOXgRx6AAz/2OQ42UFPCQpNUaM2SxYb/11zOPjZoLetGbsaTkgnA2TxOYyB9Q4mKrBmicOPp8bv6fPz1iQJehj1csT2RiVNnwWaGpNbIjqvmgiGX70VKsKV7h2DMLU1kBF52Iku3ao8IggPLHkbM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722477; 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=VtllQW53ryr07rgYCDGB3FJIE1NurDpeRlphqUaCZeM=; b=ni+/wVxbFDTt+g5Ia6yMWFMpLz49opw4Bio5B2KwNjF/eR4r9hCTmAnBoWjIGPjuyvfaKtVWq7/Zlpb1WqpbIoUNRk++PxJYk3KeNX4A2K/j2UiUthPHSjlDq1mCEFJsLXZQo6ICKamM90+fKBcEVta3G+wvhCgeG/aW+bGUL3Y= 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 1769722477043217.0386263917045; Thu, 29 Jan 2026 13:34:37 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcv-0001al-BL; Thu, 29 Jan 2026 16:32:33 -0500 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 1vlZcr-0001WG-RR for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlZcp-00019i-TV for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 9EFE3807FD; Fri, 30 Jan 2026 00:32:26 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-cnwvJqE7; Fri, 30 Jan 2026 00:32:26 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722346; bh=VtllQW53ryr07rgYCDGB3FJIE1NurDpeRlphqUaCZeM=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=s4APoV2VgIPhyI4J+0Cr/WOVdjLki7SGxVX7hZBMWzh71AFlj+FDR/i+rVk98JXE/ oD34YqmztbFItNH15l07icLn8IsUGEh6oays61wk5HOJS6A6ij+d+FURVR25BjeCQJ aSeAB1uJonyjaKec2P4myT/AkT4tJbv7CH3wCfeI= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 10/12] net/tap: fix vhostfds/vhostfd parameters API Date: Fri, 30 Jan 2026 00:32:12 +0300 Message-ID: <20260129213215.1405459-11-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722478722158500 Content-Type: text/plain; charset="utf-8" There is a bug in the interface: we don't allow vhostfds argument together with queues. But we allow vhostfd, and try use it for all queues of multiqueue TAP. Let's relax the restriction. We already check that number of vhost fds match queues (or number of fds). So, no matter do vhost fds come from vhostfds or vhostfd argument. Let's use correct vhost fds for multiqueue TAP. To achieve this we move vhost fds parsing to separate function and call it earlier in net_init_tap(). Then we have vhost fds available (and already checked) for all further cases. Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 62 ++++++++++++++++++++++++++----------------------------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/net/tap.c b/net/tap.c index dbbbe3c500..b0b5e0b0fc 100644 --- a/net/tap.c +++ b/net/tap.c @@ -838,11 +838,31 @@ static int tap_parse_fds_and_queues(const NetdevTapOp= tions *tap, int **fds, return queues; } =20 +static bool tap_parse_vhost_fds(const NetdevTapOptions *tap, int **vhost_f= ds, + unsigned queues, Error **errp) +{ + if (!(tap->vhostfd || tap->vhostfds)) { + *vhost_fds =3D NULL; + return true; + } + + if (net_parse_fds(tap->fd ?: tap->fds, vhost_fds, queues, errp) < 0) { + return false; + } + + if (!unblock_fds(*vhost_fds, queues, errp)) { + net_free_fds(*vhost_fds, queues); + return false; + } + + return true; +} + int net_init_tap(const Netdev *netdev, const char *name, NetClientState *peer, Error **errp) { const NetdevTapOptions *tap; - int fd =3D -1, vhostfd =3D -1, vnet_hdr =3D 0, i =3D 0, queues; + int fd =3D -1, vnet_hdr =3D 0, i =3D 0, queues; /* for the no-fd, no-helper case */ char ifname[128]; int *fds =3D NULL, *vhost_fds =3D NULL; @@ -875,30 +895,13 @@ int net_init_tap(const Netdev *netdev, const char *na= me, return -1; } =20 - if (tap->vhostfds && !tap->fds) { - error_setg(errp, "vhostfds=3D is invalid if fds=3D wasn't specifie= d"); - return -1; - } - - if (tap->vhostfd && tap->fds) { - error_setg(errp, "vhostfd=3D is invalid with fds=3D"); - return -1; - } - queues =3D tap_parse_fds_and_queues(tap, &fds, errp); if (queues < 0) { return -1; } =20 - if (tap->vhostfd) { - vhostfd =3D monitor_fd_param(monitor_cur(), tap->vhostfd, errp); - if (vhostfd =3D=3D -1) { - goto fail; - } - - if (!qemu_set_blocking(vhostfd, false, errp)) { - goto fail; - } + if (!tap_parse_vhost_fds(tap, &vhost_fds, queues, errp)) { + goto fail; } =20 if (tap->fd) { @@ -909,20 +912,12 @@ int net_init_tap(const Netdev *netdev, const char *na= me, =20 if (!net_init_tap_one(tap, peer, name, NULL, NULL, NULL, - vhostfd, vnet_hdr, fds[0], errp)) { + vhost_fds ? vhost_fds[0] : -1, + vnet_hdr, fds[0], errp)) { goto fail; } } else if (tap->fds) { - if (tap->vhostfds && net_parse_fds(tap->vhostfds, &vhost_fds, - queues, errp) < 0) { - goto fail; - } - for (i =3D 0; i < queues; i++) { - if (vhost_fds && !qemu_set_blocking(vhost_fds[i], false, errp)= ) { - goto fail; - } - if (i =3D=3D 0) { vnet_hdr =3D tap_probe_vnet_hdr(fds[i], errp); if (vnet_hdr < 0) { @@ -948,7 +943,8 @@ int net_init_tap(const Netdev *netdev, const char *name, } =20 if (!net_init_tap_one(tap, peer, name, ifname, - NULL, NULL, vhostfd, + NULL, NULL, + vhost_fds ? vhost_fds[0] : -1, vnet_hdr, fds[0], errp)) { goto fail; } @@ -981,7 +977,8 @@ int net_init_tap(const Netdev *netdev, const char *name, if (!net_init_tap_one(tap, peer, name, ifname, i >=3D 1 ? NULL : script, i >=3D 1 ? NULL : downscript, - vhostfd, vnet_hdr, fd, errp)) { + vhost_fds ? vhost_fds[i] : -1, + vnet_hdr, fd, errp)) { goto fail; } } @@ -991,7 +988,6 @@ int net_init_tap(const Netdev *netdev, const char *name, =20 fail: close(fd); - close(vhostfd); net_free_fds(fds, queues); net_free_fds(vhost_fds, queues); return -1; --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722420; cv=none; d=zohomail.com; s=zohoarc; b=VCNw+m2uFXParWDdKGNiJYd8HKsBu/+eYHMZ1Ti34wuWro+In4hJHLqXA9OgdXDvrxjP6pdwriiu/Lq91V1vfn7Wf0gbX6iRADLYKbP6GesNXpWa1SseUB+mo2qkCRFZHNNIwMZIBQDl/EJLKSOnoi+2qwOxQplfhlDBx1ZQkSc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722420; 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=IczTee6s/eZN+XmUencWuVRUWlxBzAlkf+VB1oO5XMM=; b=e0NSmtfowtpOQLbeXeIS7fFmAngMd/m9RUlHlppW+084yBeTRL+3p7rJR2VcoHJSErmM4g8qcAr6uWgZchFkiIUrd7mQBAkaZ9UWpUHykeGoTEXqyjMkOWOkC6gYjLakTbSgDLGoOA3Ll/Q8IyhbZBBrgKgnQuFVLR+V54A0z8c= 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 1769722419835418.83101716571946; Thu, 29 Jan 2026 13:33:39 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcw-0001d0-6i; Thu, 29 Jan 2026 16:32:34 -0500 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 1vlZcs-0001We-6a for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:30 -0500 Received: from forwardcorp1b.mail.yandex.net ([178.154.239.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vlZcq-00019p-Iv for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:29 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id 3A39F80809; Fri, 30 Jan 2026 00:32:27 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-xvrekNoo; Fri, 30 Jan 2026 00:32:26 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722346; bh=IczTee6s/eZN+XmUencWuVRUWlxBzAlkf+VB1oO5XMM=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=PMaMuWm5d7PwGy1hAsV2hsLqHJY0atqq/qcvwMLgZe3JUYJ23orRitwr+9t5CVZrh R8GWxCUNv3nzkEK6eLyCPl+NxFp9JbRbKy5Q8fOt2ja1JRfAIil5x2ttvzz7zYJB2G aQCv5ncm2fZ4+roikW3dVJQY0Lm0WGtISVJysdbM= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 11/12] net/tap: net_init_tap(): merge fd=, fds= and helper= cases into one Date: Fri, 30 Jan 2026 00:32:13 +0300 Message-ID: <20260129213215.1405459-12-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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.136; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722420388158500 Content-Type: text/plain; charset="utf-8" Now fd=3D and helper=3D cases are just a duplication of fds=3D case with queues=3D1. Let's merge them all. Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 26 +------------------------- 1 file changed, 1 insertion(+), 25 deletions(-) diff --git a/net/tap.c b/net/tap.c index b0b5e0b0fc..c6bea0dcab 100644 --- a/net/tap.c +++ b/net/tap.c @@ -904,19 +904,7 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, goto fail; } =20 - if (tap->fd) { - vnet_hdr =3D tap_probe_vnet_hdr(fds[0], errp); - if (vnet_hdr < 0) { - goto fail; - } - - if (!net_init_tap_one(tap, peer, name, NULL, - NULL, NULL, - vhost_fds ? vhost_fds[0] : -1, - vnet_hdr, fds[0], errp)) { - goto fail; - } - } else if (tap->fds) { + if (fds) { for (i =3D 0; i < queues; i++) { if (i =3D=3D 0) { vnet_hdr =3D tap_probe_vnet_hdr(fds[i], errp); @@ -936,18 +924,6 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, goto fail; } } - } else if (tap->helper) { - vnet_hdr =3D tap_probe_vnet_hdr(fds[0], errp); - if (vnet_hdr < 0) { - goto fail; - } - - if (!net_init_tap_one(tap, peer, name, ifname, - NULL, NULL, - vhost_fds ? vhost_fds[0] : -1, - vnet_hdr, fds[0], errp)) { - goto fail; - } } else { g_autofree char *script =3D tap_parse_script(tap->script, DEFAULT_NETWORK_SCRIPT); --=20 2.52.0 From nobody Tue Feb 10 11:33:26 2026 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=1769722463; cv=none; d=zohomail.com; s=zohoarc; b=RvEZz3VU31w+B+Aw8uv0SeDtkdFRPmJtlEjHIgzmYdh19MZs0BcTtWHslC6DN1W32ljdw4E2RrZ9N9IB8Jn2ES0I+8gVDLSUXAlUDEZhvGUHIU917kGVUcN7YuW+OvXwd+InlBFzNPFKeY8LOLtrixqFU7ZPc2jhimHWvbtKpgc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1769722463; 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=tJU74EzZ7JQor/gV3yKFw+7CycBwudsDBROnC+1h/Os=; b=PD9xQ8klAY88tj9BVDPyRtnIxh+uUk8JH6kGGMkj2i+NGMUllipFu01yfPrlyIKn4HHWnirfsdEaBC4YTuXphAjxjCQhh1cBvIxsDrsQg3dqMPEOZO4Mj2hPec5TRhj9W8zcGe2tw1hR7mH5NivpTECVox1St97hQxtew51Eagk= 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 1769722463479871.721859803348; Thu, 29 Jan 2026 13:34:23 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vlZcv-0001bj-Kg; Thu, 29 Jan 2026 16:32:33 -0500 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 1vlZcs-0001Wt-Mx for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:30 -0500 Received: from forwardcorp1b.mail.yandex.net ([2a02:6b8:c02:900: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 1vlZcr-0001A7-36 for qemu-devel@nongnu.org; Thu, 29 Jan 2026 16:32:30 -0500 Received: from mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net [IPv6:2a02:6b8:c10:49f:0:640:b99a:0]) by forwardcorp1b.mail.yandex.net (Yandex) with ESMTPS id C3F5D80825; Fri, 30 Jan 2026 00:32:27 +0300 (MSK) Received: from vsementsov-lin (unknown [2a02:6bf:8080:b74::1:d]) by mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net (smtpcorp/Yandex) with ESMTPSA id IWrbZO5AAOs0-kRxMHty8; Fri, 30 Jan 2026 00:32:27 +0300 Precedence: bulk X-Yandex-Fwd: 1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex-team.ru; s=default; t=1769722347; bh=tJU74EzZ7JQor/gV3yKFw+7CycBwudsDBROnC+1h/Os=; h=Message-ID:Date:In-Reply-To:Cc:Subject:References:To:From; b=sb5GNQOLsKat7qk3cFFkkJ/SLrtMVhWjGtz+pE9WIM9+1QleASsfm3BbsFYBYgJTq x8bo8sFxQYuEkIMXhw/04zM0mJqQi3U3LCZl5k+RhnuU9m1rPbpvGNnzCahUWPU/SQ 1alG+jNMY+oLNvvEFUv/Xmswo3V26uQfJDzNXLLs= Authentication-Results: mail-nwsmtp-smtp-corp-canary-81.sas.yp-c.yandex.net; dkim=pass header.i=@yandex-team.ru From: Vladimir Sementsov-Ogievskiy To: jasowang@redhat.com Cc: qemu-devel@nongnu.org, bchaney@akamai.com, yc-core@yandex-team.ru, d-tatianin@yandex-team.ru, davydov-max@yandex-team.ru, vsementsov@yandex-team.ru Subject: [PATCH v2 12/12] net/tap: net_init_tap(): relax QEMU hubs check Date: Fri, 30 Jan 2026 00:32:14 +0300 Message-ID: <20260129213215.1405459-13-vsementsov@yandex-team.ru> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260129213215.1405459-1-vsementsov@yandex-team.ru> References: <20260129213215.1405459-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:c02:900:1:45:d181:df01; envelope-from=vsementsov@yandex-team.ru; helo=forwardcorp1b.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: qemu development 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: 1769722465187154100 Content-Type: text/plain; charset="utf-8" queues may be set to 1, as well as fds may contain only one fd. No reason to block such cases. Let's check exactly number of queues. Signed-off-by: Vladimir Sementsov-Ogievskiy --- net/tap.c | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/net/tap.c b/net/tap.c index c6bea0dcab..288cfedd81 100644 --- a/net/tap.c +++ b/net/tap.c @@ -870,13 +870,6 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, assert(netdev->type =3D=3D NET_CLIENT_DRIVER_TAP); tap =3D &netdev->u.tap; =20 - /* QEMU hubs do not support multiqueue tap, in this case peer is set. - * For -netdev, peer is always NULL. */ - if (peer && (tap->has_queues || tap->fds || tap->vhostfds)) { - error_setg(errp, "Multiqueue tap cannot be used with hubs"); - return -1; - } - if (tap->has_vhost && !tap->vhost && (tap->vhostfds || tap->vhostfd)) { error_setg(errp, "vhostfd(s)=3D is not valid without vhost"); return -1; @@ -900,6 +893,15 @@ int net_init_tap(const Netdev *netdev, const char *nam= e, return -1; } =20 + /* + * QEMU hubs do not support multiqueue tap, in this case peer is set. + * For -netdev, peer is always NULL. + */ + if (peer && queues > 1) { + error_setg(errp, "Multiqueue tap cannot be used with hubs"); + goto fail; + } + if (!tap_parse_vhost_fds(tap, &vhost_fds, queues, errp)) { goto fail; } --=20 2.52.0