From nobody Fri Feb 14 15:11:00 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4Yvb905wJKz5nF1q; Fri, 14 Feb 2025 15:11:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Yvb9042gzz4KJl; Fri, 14 Feb 2025 15:11:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1739545860; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=GG5+5WKzeYcboSIgFaJ0CMTrTj+xBBGOVC8Q50vhkHs=; b=IXSEUWRZKb5AavEx/CKE2x6HDsF+NxFWzSQGshq+sozscb4wiui70oJ4xh2pPHLDJ5Auyi O9rt+qy4/tLjQmq9j/+F909LZWe12vTZ5OT5zGPSBBDskg4VaN5q9df17smyPS1x87veOt 9G7FHtV5fDuNpZvWuugNYKhZy88aSy4b2z7KMENBy9TsEVQfozi6w0m66eoKKdh/AJxiH1 0u1Ig0j4EX+7ZD9HH+qkWtvhTRPozQzHXTzO0jsn2NVLszAdSYHGA5GY/TFmLQU9c/aVd8 fmkiUa/asPm/fd5z5ap1zbPXkO8giMj0m8BeMFcUrrXeaAUVCnlLgfbCHCauTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1739545860; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=GG5+5WKzeYcboSIgFaJ0CMTrTj+xBBGOVC8Q50vhkHs=; b=G8khp17G+HkdG8H7A5j71xPzS7pF+ldueYw5EvIVLMUxijpgjAE/IYemTRrLOdx7W80LDL hIr3BzFXLf/RGNrHDbQjrarkHqT+mOFuvusi2185JqRnsqQIy9787S7lYCOkLR8cJwS754 hfDUFEPsllUiLMkdh9hnYyqp4JpQ2/UuD3kvORM58/v5y7ZwknI7HhYemidKV+cLFtTatP CnwDw/T9ZEZD8jbmW5s1IVxLXs2NUAmcVhpQ7MGxV6tMeMlVk9bX8yDfx97zpMdvRqCSRr dI3o5S0jo63aoe4JekCD7XYO4NIM6XpLBYE+aISzJ3oDfcHjy2AqNhNLfgWiiA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1739545860; a=rsa-sha256; cv=none; b=T18vXHxwvkmuhh0vlkxYaOriCDXF1jSspabhFjR+UR+3iRBjel7QrQKeBNP88EneoT8xZN Y+N04AapkdlQl3R8jetU7wuPB/MWZfCNYek4xXKXs/qjhzGZPF4rv4u5u552ydfxhrARpP gf5b96EONr6CpxxE3b074kMXNbyqLBOicM2qOAGtQumTJrHKL/VLtHIVXdoAEakpn2pBcN npSYe1MmfNGTjqqqiS+Wv14DO7KU3zsTza+HTZNj+/lOLsiiZMlopoLrz4yUmmxQbCafn7 b1Y54BtMSAY8jtZPshscArGWxupL9Ggw1SiXygvVD+Ob5Jlgnlpy8jrwYeeREQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4Yvb9030fgzcYG; Fri, 14 Feb 2025 15:11:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 51EFB0Di063416; Fri, 14 Feb 2025 15:11:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 51EFB0tZ063413; Fri, 14 Feb 2025 15:11:00 GMT (envelope-from git) Date: Fri, 14 Feb 2025 15:11:00 GMT Message-Id: <202502141511.51EFB0tZ063413@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 73c3fe4db3eb - main - gve: Fix qpl_buf_head being initialized improperly List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 73c3fe4db3ebc2bd6cb732aae77ea017fd376d22 Auto-Submitted: auto-generated The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=73c3fe4db3ebc2bd6cb732aae77ea017fd376d22 commit 73c3fe4db3ebc2bd6cb732aae77ea017fd376d22 Author: Jasper Tran O'Leary AuthorDate: 2025-02-14 15:05:46 +0000 Commit: Mark Johnston CommitDate: 2025-02-14 15:08:23 +0000 gve: Fix qpl_buf_head being initialized improperly Currently, for DQO QPL our MPASS assertion on qpl_buf_head for available pending_pkts (i.e. not holding a packet) fails due to incorrect initialization. The MPASS fails on the first run of packets through the ring when INVARIANTS is on, and when INVARIANTS is off, things work without a bug. The MPASS guards against improper reaping of "pending_pkt" objects, and thus was failing for the first run through the ring. By correctly initializing the objects in this patch we make the MPASS not fail on the first run too. Signed-off-by: Vee Agarwal Signed-off-by: Jasper Tran O'Leary Reviewed by: delphij, markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D48968 --- sys/dev/gve/gve_tx_dqo.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/sys/dev/gve/gve_tx_dqo.c b/sys/dev/gve/gve_tx_dqo.c index b4bcb1fd01c5..bf314ef95173 100644 --- a/sys/dev/gve/gve_tx_dqo.c +++ b/sys/dev/gve/gve_tx_dqo.c @@ -43,6 +43,13 @@ gve_unmap_packet(struct gve_tx_ring *tx, bus_dmamap_unload(tx->dqo.buf_dmatag, pending_pkt->dmamap); } +static void +gve_clear_qpl_pending_pkt(struct gve_tx_pending_pkt_dqo *pending_pkt) +{ + pending_pkt->qpl_buf_head = -1; + pending_pkt->num_qpl_bufs = 0; +} + static void gve_free_tx_mbufs_dqo(struct gve_tx_ring *tx) { @@ -54,10 +61,9 @@ gve_free_tx_mbufs_dqo(struct gve_tx_ring *tx) if (!pending_pkt->mbuf) continue; - if (gve_is_qpl(tx->com.priv)) { - pending_pkt->qpl_buf_head = -1; - pending_pkt->num_qpl_bufs = 0; - } else + if (gve_is_qpl(tx->com.priv)) + gve_clear_qpl_pending_pkt(pending_pkt); + else gve_unmap_packet(tx, pending_pkt); m_freem(pending_pkt->mbuf); @@ -880,8 +886,7 @@ gve_reap_qpl_bufs_dqo(struct gve_tx_ring *tx, */ atomic_add_rel_32(&tx->dqo.qpl_bufs_produced, pkt->num_qpl_bufs); - pkt->qpl_buf_head = -1; - pkt->num_qpl_bufs = 0; + gve_clear_qpl_pending_pkt(pkt); } static uint64_t @@ -981,11 +986,13 @@ gve_clear_tx_ring_dqo(struct gve_priv *priv, int i) gve_free_tx_mbufs_dqo(tx); - for (j = 0; j < tx->dqo.num_pending_pkts - 1; j++) { - tx->dqo.pending_pkts[j].next = j + 1; + for (j = 0; j < tx->dqo.num_pending_pkts; j++) { + if (gve_is_qpl(tx->com.priv)) + gve_clear_qpl_pending_pkt(&tx->dqo.pending_pkts[j]); + tx->dqo.pending_pkts[j].next = + (j == tx->dqo.num_pending_pkts - 1) ? -1 : j + 1; tx->dqo.pending_pkts[j].state = GVE_PACKET_STATE_FREE; } - tx->dqo.pending_pkts[tx->dqo.num_pending_pkts - 1].next = -1; tx->dqo.free_pending_pkts_csm = 0; atomic_store_rel_32(&tx->dqo.free_pending_pkts_prd, -1);