From nobody Wed Jun 3 20:37:38 2026 X-Original-To: dev-commits-src-branches@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 4gVzz71zbGz6ggRW for ; Wed, 03 Jun 2026 20:37:39 +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 "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4gVzz70zftz3Hbg for ; Wed, 03 Jun 2026 20:37:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1780519059; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lAIDn2Hg8FIYk7877t46TFhgaDt1kkUe4Pbh921DSXs=; b=KZe/9gshsZFmHzVYAOeo5qbwVN9UEw7PxvCTshScnAUTjfpX9I1HTtaYOXKsl4YxBR5Vcj 4cEeP8le9/vC/jwh9hY5kMopOturLN5Y4dT/xg9sUWLf+LRQB2CUrSubYt63G6pRzmU3X9 bcxBRQms8vbPbkSpqPQKVOF1MPW4+4fnB2xnvx/qtHpWp1mDIP8xiGbF65a0+qE5er5pNO hGqqP0SEbjaHangzWGV3rGDIQYJwByFwIdNThvAQCCBQuMk7N8SVor7G+dHZefYlxuq2gi 0Y6QoObXcNv4yNw1358j9Y9fISvr+iLumOkxUxJp+VmNzjBT1NTUmLfxj7m1Rw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1780519059; a=rsa-sha256; cv=none; b=fKOCTWyixqDAheBEqn3ymTs5HNfgkgm/34uvzJGrROVe506qdPDxWpjs35gZ02IeVxVhfB 13bb/pUzYi+tkcqNUqnopHOIsKLNL6NUS5UEREqoGMCeWNHeD2w02iV0TlS0R03v9/CWvU 4O6LaZrvcVnRSTdWnOegDbYsYY7QQ3aENkXWtYz6bGqv62nozn8jRgDtZ5LemPNhQx+yzh /x7jyG3pLx6dLZaXxnpTLPpAPG/44kPcIcGIyN1F0n4E+vr0FlERA5fnNXebRixlP1vRxG AXcQ9cDteZJrU6TN5ihUBTKy/1l89BeBT7cCRs1FnF4iwKyL7zoKqj1d8xkFWg== 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=1780519059; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=lAIDn2Hg8FIYk7877t46TFhgaDt1kkUe4Pbh921DSXs=; b=VK7/GZy2mkEiXlyf64vte5+uyzzYkUVnGbVWFi5GVNF4z49LC6yCqmQUXiVODRv98EtRJE bAjiPi3Usti9Q5S1j2Fr3dfLRLRlKJ4Lyo1nvMjgo4or4Qz3WkE24l79xX87pDwmnd+3Li VxuAP7K3QpMypUrPwx+cFtUy3l2SjACMLsTsI0S9F1S6PHCku/rLqAgK057cdPLVKnByQc WaiG7+wny+C+aGXF+VpaYDYNE7ngsPrEig9uTmakuhRUwSrQXXGZECB0y1DHynXhQUW2i7 brhI7p+l9+vMdKD4YXG8Y19Q5RUBGmEoIG58zW0sIERDsVbrvKMeC549L3WgTw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gVzz670YPzC4H for ; Wed, 03 Jun 2026 20:37:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 390e5 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 03 Jun 2026 20:37:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Colin Percival From: Arthur Kiyanovski Subject: git: 94659fc28c25 - stable/14 - ena: Adjust ena_[rt]x_cleanup to return bool List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: akiyano X-Git-Repository: src X-Git-Refname: refs/heads/stable/14 X-Git-Reftype: branch X-Git-Commit: 94659fc28c253b99328c0377bd909635da812459 Auto-Submitted: auto-generated Date: Wed, 03 Jun 2026 20:37:38 +0000 Message-Id: <6a209092.390e5.2d7d26be@gitrepo.freebsd.org> The branch stable/14 has been updated by akiyano: URL: https://cgit.FreeBSD.org/src/commit/?id=94659fc28c253b99328c0377bd909635da812459 commit 94659fc28c253b99328c0377bd909635da812459 Author: Colin Percival AuthorDate: 2026-04-17 17:13:44 +0000 Commit: Arthur Kiyanovski CommitDate: 2026-06-03 20:35:35 +0000 ena: Adjust ena_[rt]x_cleanup to return bool The ena_[rt]x_cleanup functions are limited internally to a maximum number of packets; this ensures that TX doesn't starve RX (or vice versa) and also attempts to ensure that we get a chance to refill the RX buffer ring before the device runs out of buffers and starts dropping packets. Historically these functions have returned the number of packets which they processed which ena_cleanup compares to their respective budgets to decide whether to reinvoke them. This is unnecessary complication; since the precise number of packets processed is never used, adjust the APIs of those functions to return a bool indicating if they want to be reinvoked (aka if they hit their limits). Since ena_tx_cleanup now only uses work_done if diagnostics are enabled (ena_log_io macros to nothing otherwise) eliminate that variable and pass its value (ENA_TX_BUDGET - budget) to ena_log_io directly. No functional change intended; this will simplify a future commit. Reviewed by: akiyano Sponsored by: Amazon MFC after: 6 days Differential Revision: https://reviews.freebsd.org/D56478 (cherry picked from commit f6d2c8591c10d87050c358ef20428f13c19554ca) --- sys/dev/ena/ena_datapath.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/sys/dev/ena/ena_datapath.c b/sys/dev/ena/ena_datapath.c index ab082fa1810f..ab7b8a468c30 100644 --- a/sys/dev/ena/ena_datapath.c +++ b/sys/dev/ena/ena_datapath.c @@ -44,8 +44,8 @@ * Static functions prototypes *********************************************************************/ -static int ena_tx_cleanup(struct ena_ring *); -static int ena_rx_cleanup(struct ena_ring *); +static bool ena_tx_cleanup(struct ena_ring *); +static bool ena_rx_cleanup(struct ena_ring *); static inline int ena_get_tx_req_id(struct ena_ring *tx_ring, struct ena_com_io_cq *io_cq, uint16_t *req_id); static void ena_rx_hash_mbuf(struct ena_ring *, struct ena_com_rx_ctx *, @@ -75,7 +75,8 @@ ena_cleanup(void *arg, int pending) struct ena_com_io_cq *io_cq; struct ena_eth_io_intr_reg intr_reg; int qid, ena_qid; - int txc, rxc, i; + int i; + bool rx_again, tx_again; tx_ring = que->tx_ring; rx_ring = que->rx_ring; @@ -99,14 +100,14 @@ ena_cleanup(void *arg, int pending) atomic_store_8(&rx_ring->first_interrupt, 1); for (i = 0; i < ENA_CLEAN_BUDGET; ++i) { - rxc = ena_rx_cleanup(rx_ring); - txc = ena_tx_cleanup(tx_ring); + rx_again = ena_rx_cleanup(rx_ring); + tx_again = ena_tx_cleanup(tx_ring); if (unlikely(((if_getdrvflags(ifp) & IFF_DRV_RUNNING) == 0) || (ENA_FLAG_ISSET(ENA_FLAG_TRIGGER_RESET, adapter)))) return; - if ((txc != ENA_TX_BUDGET) && (rxc != ENA_RX_BUDGET)) + if (!rx_again && !tx_again) break; } @@ -238,7 +239,7 @@ ena_get_tx_req_id(struct ena_ring *tx_ring, struct ena_com_io_cq *io_cq, * TX_COMMIT. The first check of free descriptor is performed before the actual * loop, then repeated at the loop end. **/ -static int +static bool ena_tx_cleanup(struct ena_ring *tx_ring) { struct ena_adapter *adapter; @@ -250,7 +251,6 @@ ena_tx_cleanup(struct ena_ring *tx_ring) int rc; int commit = ENA_TX_COMMIT; int budget = ENA_TX_BUDGET; - int work_done; bool above_thresh; adapter = tx_ring->que->adapter; @@ -304,10 +304,8 @@ ena_tx_cleanup(struct ena_ring *tx_ring) } } while (likely(--budget)); - work_done = ENA_TX_BUDGET - budget; - ena_log_io(adapter->pdev, DBG, "tx: q %d done. total pkts: %d\n", - tx_ring->qid, work_done); + tx_ring->qid, ENA_TX_BUDGET - budget); /* If there is still something to commit update ring state */ if (likely(commit != ENA_TX_COMMIT)) { @@ -339,7 +337,7 @@ ena_tx_cleanup(struct ena_ring *tx_ring) tx_ring->tx_last_cleanup_ticks = ticks; - return (work_done); + return (budget == 0); } static void @@ -559,7 +557,7 @@ ena_rx_checksum(struct ena_ring *rx_ring, struct ena_com_rx_ctx *ena_rx_ctx, * ena_rx_cleanup - handle rx irq * @arg: ring for which irq is being handled **/ -static int +static bool ena_rx_cleanup(struct ena_ring *rx_ring) { struct ena_adapter *adapter; @@ -701,7 +699,7 @@ ena_rx_cleanup(struct ena_ring *rx_ring) tcp_lro_flush_all(&rx_ring->lro); - return (ENA_RX_BUDGET - budget); + return (budget == 0); } static void