From nobody Sat Mar 08 08:13:52 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 4Z8wsY74Dlz5qcnN; Sat, 08 Mar 2025 08:13:53 +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 "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4Z8wsX6TqBz3l1j; Sat, 08 Mar 2025 08:13:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741421632; 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=YNni6ILoAf7XwbDEkMLPXE1dS+baBxTn7RfDkn+6BSI=; b=HwiaLcSEkdub/v+t8+MV/8zqEmkI+D80HKUH5UBugZ+piKw5oCP5LRRC/g1QKVoDhr+CjJ JxdXAtDnHY4UaJFcSku0MRrsucRvmJOg4KjzSn1U2eoBndupS4oJRy6vZ0sezDSGH3KO0C Fbu5kNv37CmUAah3MBOSxdAW+VuPWQtSQHuYRLbraCNIuEfEb5IhSDlAIyTmQPGY7/BSR5 y2/w+IvInJ6b9N1nOTloR/UNCkSW3ff3G6B403doSXqFk4bX/HYccgyxOGfmGhCi3Yt4i1 ZYNiVJ6GM4cOLkuDFj4zMdpWvPiEToduwUXdXKVLHliU2l8jT0URDKEr25MB7g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1741421632; a=rsa-sha256; cv=none; b=colR6FQ7gWXJU+nm+VExz8eG5vuAw2er9/0wNcOJ2rHSx9vbgjgKKOQB6Sv2SULbdqQHKB erZ62gQMF7a956oin4MywZ7Gd7Z3uqA+/HrwUFQhyGUEe5Rc7jCdiFTHVGQe6G2D+5BIpL ZDlWUw/+hAiuu4aPKEgVFFmVqpygQgTjn3Z0ndXx6Kcm9z1YQSvT1taZmZ66qZiPh8UH/d nK72EEmF3pB0rl+rB62MYg2ZTc4Xrc7JrwLa7aXW5PRns2DL/yRxoMmTjjDQ7l4GXubPls ljFz/O6sl5bfENYVa+ih9ylPkjLtck6ofqZtaBqF6dyCS4qBR/09M6zAo4rpQg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1741421632; 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=YNni6ILoAf7XwbDEkMLPXE1dS+baBxTn7RfDkn+6BSI=; b=kTAS6M6Vap5ZOwKkWHNsCj3hEmt2kpbpVYXa61lL68u9f9wqA5JIrmt1RAgF3GE2IYo+sn R9riioUShWdnfaQt2oAxpd4a1o9ZTaAHjCZ2mW2EdHF4UPueZUnsng6jfEuGtIKZbkPoXd 4bBgs1NVUlGO8hhPbw/2/ScoBBqRT2Ach+GhTe+HAwkE6EdCtlqh4zMSHNpvag5188MG3/ u2bvj7fLvdm2h7EiPsHLisGHTI//d2XGhpwFNvqWAzA0amma9pTGeGIKKPCnT9VTAyet5r v2IlS0JAl7ENxVunGONX6HAfb68wHjLeI6w4mM85zTgIjJbZ2qefosohxqWfXQ== 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 4Z8wsX4lXFzsv; Sat, 08 Mar 2025 08:13:52 +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 5288Dqc6097498; Sat, 8 Mar 2025 08:13:52 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 5288DqpI097495; Sat, 8 Mar 2025 08:13:52 GMT (envelope-from git) Date: Sat, 8 Mar 2025 08:13:52 GMT Message-Id: <202503080813.5288DqpI097495@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mark Johnston Subject: git: 875ec35c0661 - stable/14 - 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/stable/14 X-Git-Reftype: branch X-Git-Commit: 875ec35c0661ac2dfd07c64b4ccf5860b1c08fc8 Auto-Submitted: auto-generated The branch stable/14 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=875ec35c0661ac2dfd07c64b4ccf5860b1c08fc8 commit 875ec35c0661ac2dfd07c64b4ccf5860b1c08fc8 Author: Jasper Tran O'Leary AuthorDate: 2025-02-14 15:05:46 +0000 Commit: Mark Johnston CommitDate: 2025-03-07 22:51:48 +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 (cherry picked from commit 73c3fe4db3ebc2bd6cb732aae77ea017fd376d22) --- 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);