From nobody Sat Aug 8 15:57:59 2026 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 4hHQf05qx8z6nrfx for ; Sat, 08 Aug 2026 15:58: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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hHQdz45n1z3pFD for ; Sat, 08 Aug 2026 15:57:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786204679; 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=55Y+44AEq+caDcDTGI3MqbzAwq+dG66wuzztJpoo5Vo=; b=UR0YqTUZjqsi4romyotnX9n41ac6S/7AXehsePkVpqPjN3JNTwFpS7NOe+Y04IyP0JowID n9NNjlfC8ZihjPYPbmwDpfQb2vySz+TISAo7nWoKXEyYFRRxKAj74VOMZm+GP1RDXQwFEe 3Du8Kgr9ZJ+j9AlIBarOmNsMTjbjvRMtqiIOQpXnqTU9vKhvC6T411DBKh0z410gmpO7UH UTYbn/ShmJ2or0EC0yt3c8NHRhZ8NCIv7LAsNooqmHES1DLaUTvAoRScxqfmb9ZJ7RFY/t QIDvHzzxUCmgwYb+mt+tAasnhWkXkaxBzd//8B+8J/RtVR8z9UYapgr47uWfnw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786204679; a=rsa-sha256; cv=none; b=oAn4ptFEJdw+aftmrgawL2oP8KlkX9UO1OavwQE9Y3hcsND9NV5DUbAfEV4n2ISpN6IKYH a59qFE/rJTEie9SQfE1IeE9UWNVZKqglL3bbz55/VDwPrny43WpLgxWLpRMfKCWHIk1p9U 8l/vGlVO6noSheAdUxOwROP3zUlQgDkQko01KqYMrmiLxScwnwXN7kPrLGkiwWjue0W2wM h3KwZlr4DiX0y2fxDi8hx1siUu/xk4Gj+7llWUCbbdQ8pODLSzny/ECS46iPBEgLc0ZUu9 I6o6g7zQCjOpIWXQXcGjv4BZ9X0NCfOKcbGeetTCdzRKg7COVFyafL6CQt81Jg== 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=1786204679; 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=55Y+44AEq+caDcDTGI3MqbzAwq+dG66wuzztJpoo5Vo=; b=WBMHufU33hosX7RKvWo+tWT+TELHYLr3Fh0H+EfRZiLpM2vUmAyQrfFt1+GORFY818DVyR WvAW3E69cRC68G/BsS+LbvI/rCtYnE+Zt7fdqA1uY2fcjlISz+dyowmrkoxZcqJfD5k4US Bymi49gN/MZPJtIteAVABaTS+VCwyM4Q7EFNR2POM9wV+v0CZ/ACA1CA35Pob2Uy2NPBYf CCmSa6hR5LYnJMz9OQE0URbBlVDhJ0RcR5v5k8nGd3SdSQ45BQ4RJNjQZfpuz7E39ZSdnr uhgEfjY4ACmIzSRrtVnOb42BW02c//uFy1u/C+R1pw6GLWxQPnIae2x7XwkaTg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hHQdz1WVTzk3X for ; Sat, 08 Aug 2026 15:57:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3043f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sat, 08 Aug 2026 15:57:59 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 0baf0fabdb5e - main - ix/ixv: Match Tx writeback thresholds to iflib 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 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: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0baf0fabdb5e60e917458f85706707ee92683080 Auto-Submitted: auto-generated Date: Sat, 08 Aug 2026 15:57:59 +0000 Message-Id: <6a775207.3043f.5d69db35@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=0baf0fabdb5e60e917458f85706707ee92683080 commit 0baf0fabdb5e60e917458f85706707ee92683080 Author: Kevin Bowling AuthorDate: 2026-08-08 11:10:18 +0000 Commit: Kevin Bowling CommitDate: 2026-08-08 15:55:45 +0000 ix/ixv: Match Tx writeback thresholds to iflib PTHRESH controls when the device prefetches transmit descriptors, HTHRESH controls how many host descriptors must be ready, and WTHRESH controls completion writeback batching. iflib places RS on selected descriptors and reclaims through those checkpoints. The data sheets require WTHRESH to be zero when software uses RS. Clear WTHRESH while retaining the established PTHRESH 32 and HTHRESH 1 fetch policy. This also follows DPDK in pairing sparse RS descriptors with WTHRESH zero. DPDK defaults to 32/0/0, while Linux ixgbevf uses 32/1/8. The 32/1/0 setting preserves FreeBSD's prefetch policy and the data-sheet requirement that HTHRESH be nonzero when PTHRESH is used. MFC after: 2 weeks --- sys/dev/ixgbe/if_ix.c | 10 ++++------ sys/dev/ixgbe/if_ixv.c | 4 ++-- sys/dev/ixgbe/ixgbe.h | 8 ++++++++ 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c index 1aa6c039ad74..545516cb7372 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -4009,17 +4009,15 @@ ixgbe_if_init(if_ctx_t ctx) struct tx_ring *txr = &tx_que->txr; txdctl = IXGBE_READ_REG(hw, IXGBE_TXDCTL(txr->me)); - txdctl |= IXGBE_TXDCTL_ENABLE; - /* Set WTHRESH to 8, burst writeback */ - txdctl |= (8 << 16); + txdctl &= ~IXGBE_TXDCTL_THRESH_MASK; + txdctl |= IXGBE_TXDCTL_ENABLE | IXGBE_TXDCTL_THRESH_DEFAULT; /* * When the internal queue falls below PTHRESH (32), * start prefetching as long as there are at least - * HTHRESH (1) buffers ready. The values are taken - * from the Intel linux driver 3.8.21. + * HTHRESH (1) buffers ready. Leave WTHRESH at zero + * so that writeback follows iflib's sparse RS bits. * Prefetching enables tx line rate even with 1 queue. */ - txdctl |= (32 << 0) | (1 << 8); IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(txr->me), txdctl); } diff --git a/sys/dev/ixgbe/if_ixv.c b/sys/dev/ixgbe/if_ixv.c index ae7f1a64babb..f9e58ecf5877 100644 --- a/sys/dev/ixgbe/if_ixv.c +++ b/sys/dev/ixgbe/if_ixv.c @@ -1349,9 +1349,9 @@ ixv_initialize_transmit_units(if_ctx_t ctx) u32 txctrl, txdctl; int j = txr->me; - /* Set WTHRESH to 8, burst writeback */ txdctl = IXGBE_READ_REG(hw, IXGBE_VFTXDCTL(j)); - txdctl |= (8 << 16); + txdctl &= ~IXGBE_TXDCTL_THRESH_MASK; + txdctl |= IXGBE_TXDCTL_THRESH_DEFAULT; IXGBE_WRITE_REG(hw, IXGBE_VFTXDCTL(j), txdctl); /* Set the HW Tx Head and Tail indices */ diff --git a/sys/dev/ixgbe/ixgbe.h b/sys/dev/ixgbe/ixgbe.h index 7c3f2aee7216..347a4d4974bd 100644 --- a/sys/dev/ixgbe/ixgbe.h +++ b/sys/dev/ixgbe/ixgbe.h @@ -121,6 +121,14 @@ /* Alignment for rings */ #define DBA_ALIGN 128 +/* + * iflib uses the RS bit to select the descriptors whose status it polls. + * Keep WTHRESH zero so the hardware honors RS, and retain the driver's + * established descriptor-prefetch settings. + */ +#define IXGBE_TXDCTL_THRESH_MASK 0x007f7f7f +#define IXGBE_TXDCTL_THRESH_DEFAULT ((32 << 0) | (1 << 8)) + /* * This is the max watchdog interval, ie. the time that can * pass between any two TX clean operations, such only happening