From nobody Fri Apr 24 22:30:35 2026 X-Original-To: dev-commits-src-main@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 4g2SMv3qzqz6bPYX for ; Fri, 24 Apr 2026 22:30:35 +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 4g2SMv1ckQz3kc6 for ; Fri, 24 Apr 2026 22:30:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1777069835; 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=0pnogA4a+rZZofnTZ09uB+dwFdN31MFCBCd59XOAOoQ=; b=dFEIrrWIbCwYe9HRpPmNkneyr2umU/NJK2pRF/gWfidkhiC99cJrCKs04FOko7MJYb6qU1 Acb2KW92cN2eD+u8mXk7QZVmeGnreqcBA6cBzN5wKu7U2fmqM2+OfK+4bc/e8+GjCStkCI oHfFHZA8yjIMp/0Zkx6It5U8aR3juMCnL0hxs7u5PEMohqyRLhkGEt2Bj6gBnpiUrfMPT/ ZEIjHzOAC51CsZxOeh1DYgeVaOGJqPNG7gVJp4gHV0OSZegXCqUW/unZqHIJCLIrC6o/wJ MyPOe9bocFSoTPf4ogq9l4mo8LgOHR32AzEvF6ylIMNq1XYZldL+QNl68B6Xww== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1777069835; a=rsa-sha256; cv=none; b=CwmYqagVxLfIbqJyZOgusCSr4/kYxJfGqYpvAVgkeoFq3d0Pje9WHfVREV++7HqMxk0x1/ hKzC+ilL2CVHWMoE2ghxksiiaD6IW9t8DCUPjCCDnvz52JRVdoQcRKhVe3+TXmufw9tFgw udbIf38QhLZlaO7YUB5RQ8CM7cvd5JLAQDTe4/u/qVU4bqmEz8IRj2oxDUJSdDGUTy1RWU 24k8JaWczC+dKxKf196RohRtVwECGV8oqKAIAjgeDapvGveScA1jgBYJE2q6c1slwSmmHm nym4O4yMoL3RLkeQqHkdDmQh25bqjAZPcM+hdIbD9fCgspVGeYBT6T3Aq/7bMw== 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=1777069835; 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=0pnogA4a+rZZofnTZ09uB+dwFdN31MFCBCd59XOAOoQ=; b=yBkFFvwXiCE38zO9SbL7Q7zRy4kWsDrIAWpmiDxf3wx2LTpo+RjlRTjIUUzes5pGaS1fQb +2PftmyvCsErBMJ/Rdkg+x7PZPxT8hF0vgcMzfjl/5lUK6Y+G8IdowA13LkjXfcnpvMOhS 3yJH8psQ7V+HBWyzQ9C1ERFE+ptaYmnrdkAGGzYXvBJnCjwzF6++8nOZCv6Ok2uX1bIdBo cNrMWbi6WBNBhEyxr1ZwFbco7GnPBsKgWY9D5uG7x6UWDCpEypBILbxuP/nQgngfKRoGq0 okAHFv/cBveaSFEtrFUCOSJoEkesxdKS3E+LjTzbRSjPHkNO8wqGWltm4DffQw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4g2SMv0hZTz1L9X for ; Fri, 24 Apr 2026 22:30:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 433f8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 24 Apr 2026 22:30:35 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Colin Percival Subject: git: f6d2c8591c10 - main - ena: Adjust ena_[rt]x_cleanup to return bool List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f6d2c8591c10d87050c358ef20428f13c19554ca Auto-Submitted: auto-generated Date: Fri, 24 Apr 2026 22:30:35 +0000 Message-Id: <69ebef0b.433f8.6fba5de8@gitrepo.freebsd.org> The branch main has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=f6d2c8591c10d87050c358ef20428f13c19554ca commit f6d2c8591c10d87050c358ef20428f13c19554ca Author: Colin Percival AuthorDate: 2026-04-17 17:13:44 +0000 Commit: Colin Percival CommitDate: 2026-04-24 22:29:57 +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 --- 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 ec64ae9324bf..57148d8ef81f 100644 --- a/sys/dev/ena/ena_datapath.c +++ b/sys/dev/ena/ena_datapath.c @@ -42,8 +42,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 *, @@ -73,7 +73,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; @@ -97,14 +98,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; } @@ -236,7 +237,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; @@ -248,7 +249,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; @@ -302,10 +302,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)) { @@ -337,7 +335,7 @@ ena_tx_cleanup(struct ena_ring *tx_ring) tx_ring->tx_last_cleanup_ticks = ticks; - return (work_done); + return (budget == 0); } static void @@ -555,7 +553,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; @@ -697,7 +695,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