From nobody Tue Aug 25 00:42:45 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 4hTTX60k76z6pNh0 for ; Tue, 25 Aug 2026 00:42:46 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hTTX55WcZz3GCc for ; Tue, 25 Aug 2026 00:42:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787618565; 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=IYJEJM9GUe3RMv5k+lxgZi+53RsLrrD+EyeY1dArofA=; b=edTJlcPYOwU8myu3Ps6aHNTt/8a/gHQwgtNc7UV63F8GQecOYTNCIZYzyRkq8X+R6x8Xce nOqzIlYbfJrFiFNWZbWB8pQ4NGU0K/qiB5OOybdo3BFICyNBEiNT9K4OtWI9HGzrBiTmm+ a1ysO3Un+xplPGDv/LQEev+G5XjU65xZMJmIoA78LL8vDv/tcoL9o5sa5zyGasTPjPaoyS D6Q3v5Od6crzgdXKYRH4fJ5spWo6HZDgUKQH/+qC/sQLB2J9yXQwm868OG0m6hkn3/ispZ 2rcUscH1x+ID2rkVAL5mldZxMN18RP+FHgV3e2L6ujXNi5l9xqW3/TQS+CqzPg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787618565; a=rsa-sha256; cv=none; b=xY4PeJySD7JTH+nFPsT4JmGZRl14s6fkyLOdppq4ASg+0G/5PDhKOfwruIDRNcChoXQRHb Ah/FOZScBYQ2kvRu+L9ZSawGy+76AVamLihxLikzUw9k1tGFbviMwfQhPo3xiBRTkMG74D 2l+9nt+F7YOvBqRJQFmI/GbLbW1CbQQhQCuAS9I4MhmYWR6RisJFFfw3QiV4m7/brzrSoG xyRP+Phvbl/9gKbfC62JogR34DyB+77aG+q6S51lE2TmyahYLpth4u1Ja6lJ3+mQMRXa1N UwHvvHcFySVpkPg4zx2fzjG3uVmd220DH/ixkZM2YVqPbxOfnjePUUHyZYDGSg== 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=1787618565; 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=IYJEJM9GUe3RMv5k+lxgZi+53RsLrrD+EyeY1dArofA=; b=LVBLXnv2x96Ziqp4C3jmVV1Gw6C/hAIrMdS1e45n8nABpfSL2GGlcK4NLg8/iCn+sZW+k5 lgjR460Ae+lbxKQDNVGpF9tYbHBT0s56AMGEXpNWqGTYdzHSWzta4pZNmJytNuyoxSr550 k+s3kP5wPCPCX8Hyt8t3Md6jtDwOfRLgAO953JzvAo3pjF9aCubEVSrv5avxd3bFlzcEFi kUPH1PPvSiIBISCb8yS1NLXY74ht9zmmVQQaA500cxKh0Yk8u116UVw1HiHBnTsdRzG+4u L++XnsdFY2TO4YyJc/vWVATDEwV8LspHxybmdqaHMzBevgH5BZDXPKD9DGeySA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hTTX549xfzCnY for ; Tue, 25 Aug 2026 00:42:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3f3c9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 25 Aug 2026 00:42:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 56767c01d41a - stable/14 - e1000: Verify i210 and i211 multicast table writes 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/stable/14 X-Git-Reftype: branch X-Git-Commit: 56767c01d41a5ab4ffa42fb0196fbd9119b8fcea Auto-Submitted: auto-generated Date: Tue, 25 Aug 2026 00:42:45 +0000 Message-Id: <6a8ce505.3f3c9.5faea71b@gitrepo.freebsd.org> The branch stable/14 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=56767c01d41a5ab4ffa42fb0196fbd9119b8fcea commit 56767c01d41a5ab4ffa42fb0196fbd9119b8fcea Author: Kevin Bowling AuthorDate: 2026-08-11 17:35:43 +0000 Commit: Kevin Bowling CommitDate: 2026-08-25 00:39:37 +0000 e1000: Verify i210 and i211 multicast table writes The i210 and i211 can occasionally fail to accept multicast table writes, particularly while addresses are added and removed rapidly. Read the table back and rewrite mismatches for up to three passes. This prevents multicast reception from retaining stale filter state while keeping the workaround limited to the affected controllers. (cherry picked from commit bb8d0944b5d53863f00492b69b7bf13d2618fc95) --- sys/dev/e1000/e1000_mac.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/sys/dev/e1000/e1000_mac.c b/sys/dev/e1000/e1000_mac.c index 46e91773c126..f311df658d78 100644 --- a/sys/dev/e1000/e1000_mac.c +++ b/sys/dev/e1000/e1000_mac.c @@ -584,6 +584,37 @@ u32 e1000_hash_mc_addr_generic(struct e1000_hw *hw, u8 *mc_addr) return hash_value; } +/** + * e1000_i21x_check_mta - Verify MTA writes on i210 and i211 + * @hw: pointer to the HW structure + * + * The i210 and i211 can occasionally fail to accept MTA writes. Read the + * table back and rewrite mismatched entries, with a bounded retry count. + **/ +static void +e1000_i21x_check_mta(struct e1000_hw *hw) +{ + bool failed; + int i, retries = 3; + + do { + failed = false; + for (i = hw->mac.mta_reg_count - 1; i >= 0; i--) { + if (E1000_READ_REG_ARRAY(hw, E1000_MTA, i) == + hw->mac.mta_shadow[i]) + continue; + failed = true; + E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, + hw->mac.mta_shadow[i]); + E1000_WRITE_FLUSH(hw); + } + if (failed && --retries == 0) { + DEBUGOUT("Failed to update MTA after retries\n"); + break; + } + } while (failed); +} + /** * e1000_update_mc_addr_list_generic - Update Multicast addresses * @hw: pointer to the HW structure @@ -619,6 +650,8 @@ void e1000_update_mc_addr_list_generic(struct e1000_hw *hw, for (i = hw->mac.mta_reg_count - 1; i >= 0; i--) E1000_WRITE_REG_ARRAY(hw, E1000_MTA, i, hw->mac.mta_shadow[i]); E1000_WRITE_FLUSH(hw); + if (hw->mac.type == e1000_i210 || hw->mac.type == e1000_i211) + e1000_i21x_check_mta(hw); } /**