From nobody Thu Sep 03 00:53:36 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 4hb1LS4Yvjz6qyJc for ; Thu, 03 Sep 2026 00:53:36 +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 4hb1LS3k8Gz3D2q for ; Thu, 03 Sep 2026 00:53:36 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788396816; 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=BOlbEmYGgGt9GWW00QTVdbKQKyOPNs+aeqAxVITd4p4=; b=TNlvx7gsFHjrnYBVIk3jlG9TW8WM43imyh2SJH6azITH+vKLjM/wnlOpSBywGkPtomAaQs 8eHQHuTs5iyKkY7SUwudqXckhMdFw7TCCluuDLSBBPl0YV7lwtXjgjom32G61csOvM6sOC aEMHTBdr05qWBdDgVzGiEyYJ07eTL/TMFee2q+HUhxMpYxFMiATvem1gnNrLcL1mUNdI7A kHGcJ5P5pTLio7gTnuePBwmCIccAPvGAae9N9keatgU+9mvpxg2Xw6/362Yq7yeDEzW7Ek 7Q97IhKc9qKGEef1B0RWmgAu1+Fd5/3Izu+wbLD7LGgze6GXvyX+kMCwvhdLlA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788396816; a=rsa-sha256; cv=none; b=tHkegt5C/bb9N4j/8MDNgf6nnN7o865senvgWvLk4eXmZ3jCUHC5itnXLsmVSI4RH6255k ULoq07bZTm5Wqfrf7NSWVySLdtm6TQquVHnkU+fcWjBnqcG/hv2bXWSPUWJ8ayC3F+Z2pm lLcNbV1JIQVN0FGo6iRQ79JNi6j0FBiGGHbuyYKDRs6p1XsHI4ak25jmbDx+q7vNZhB9Xj s1k9Kk9fK9+9fZVKTmmREjg5e6OyYvjd4riuhdtevPgmmu80JNjF8UioseWF9faneJAn4n PHMg/yYI9GZr+97SclVD3mztnmX4eWcI14r/ILLQUQCA370S+VgjLVhqUQzoEw== 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=1788396816; 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=BOlbEmYGgGt9GWW00QTVdbKQKyOPNs+aeqAxVITd4p4=; b=qT9gz1ibOWC3oqMAN3f1EVQDoQQxUDclvxzeViaTqvnzv6A6+DyMB+nzW+zyCI7qmSHMw/ PMd7+EX+U6ihxW2srJH6hmnmaRdjmHlTBZYAr6NEmAFTLehiy80dqt4GcSJaxuZKjkB1He 0gyGQW9sbrTxCrI2w+pwpntR/Id0P2NA5BslQsMlFyPZ7e0czr9P80l2xovhwrEkGqSpK/ ucQI3oXVhAsI/bprz4dD3/ZjOvjBCK6RZWHrgjsnYw/dFVs5ZsbVMFIsBQsBegZ/jnsmt+ q+ivVkBRb6Tj0e8KXu7xMIyo7Naln7iIVM8TMZ+LeBJRnzWt1PdIu0kUEKBhFA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hb1LS2fGmz16Qc for ; Thu, 03 Sep 2026 00:53:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1d0a2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 03 Sep 2026 00:53:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 61b2ea4b897c - stable/15 - e1000: Report 82571 packet buffer ECC errors 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/15 X-Git-Reftype: branch X-Git-Commit: 61b2ea4b897c03e15511afc277c498dde6874a55 Auto-Submitted: auto-generated Date: Thu, 03 Sep 2026 00:53:36 +0000 Message-Id: <6a98c510.1d0a2.32c39c0d@gitrepo.freebsd.org> The branch stable/15 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=61b2ea4b897c03e15511afc277c498dde6874a55 commit 61b2ea4b897c03e15511afc277c498dde6874a55 Author: Kevin Bowling AuthorDate: 2026-08-16 07:11:57 +0000 Commit: Kevin Bowling CommitDate: 2026-09-03 00:53:13 +0000 e1000: Report 82571 packet buffer ECC errors The 82571 PBA_ECC register contains a 12-bit count of packet buffer ECC detections. The shared code enables single-bit correction, but neither FreeBSD nor the DPDK base driver consumes the counter. Sample it with the ordinary statistics timer, accumulate the value under dev.em.N.memory_errors.detected_packet_buffer, and clear the hardware counter while preserving correction and reserved register state. Do not enable its shared interrupt: the register does not distinguish corrected from uncorrectable events and does not provide a safe fatal recovery policy. Validated on a dual port 82571EB. Both functions reported zero after a clean boot, and a controlled link down/up cycle left the counter at zero while the management link recovered at 1 Gb/s without issue. Sponsored by: BBOX.io (cherry picked from commit aec0f1b85b54d14819747ed3364f366d21e76d88) --- sys/dev/e1000/if_em.c | 54 ++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 47 insertions(+), 7 deletions(-) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 99495e93d265..6d7e3a63c435 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -1901,6 +1901,13 @@ em_has_pch_ecc(const struct e1000_hw *hw) hw->mac.type < e1000_82575); } +static bool +em_has_82571_ecc_stats(const struct e1000_hw *hw) +{ + + return (hw->mac.type == e1000_82571); +} + static bool em_has_82575_memory_errors(const struct e1000_hw *hw) { @@ -2047,6 +2054,13 @@ em_has_memory_errors(const struct e1000_hw *hw) return (em_memory_error_intr_mask(hw) != 0); } +static bool +em_has_memory_error_stats(const struct e1000_hw *hw) +{ + + return (em_has_82571_ecc_stats(hw) || em_has_memory_errors(hw)); +} + static u32 em_fatal_error_intr_mask(struct e1000_softc *sc) { @@ -2141,6 +2155,24 @@ em_update_pch_ecc_stats(struct e1000_softc *sc, u32 pbeccsts) E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT; } +static void +em_update_82571_ecc_stats(struct e1000_softc *sc) +{ + struct e1000_hw *hw; + u32 count, pba_ecc; + + hw = &sc->hw; + pba_ecc = E1000_READ_REG(hw, E1000_PBA_ECC); + count = (pba_ecc & E1000_PBA_ECC_COUNTER_MASK) >> + E1000_PBA_ECC_COUNTER_SHIFT; + if (count == 0) + return; + sc->corrected_error_packet_buffer_count += count; + /* Preserve correction and reserved state while clearing statistics. */ + E1000_WRITE_REG(hw, E1000_PBA_ECC, + pba_ecc | E1000_PBA_ECC_STAT_CLR); +} + static void em_update_i210_ecc_stats(struct e1000_softc *sc) { @@ -5828,7 +5860,9 @@ em_update_stats_counters(struct e1000_softc *sc) E1000_READ_REG(&sc->hw, E1000_TSCTFC); } - if (em_has_pch_ecc(&sc->hw)) + if (em_has_82571_ecc_stats(&sc->hw)) + em_update_82571_ecc_stats(sc); + else if (em_has_pch_ecc(&sc->hw)) em_update_pch_ecc_stats(sc, E1000_READ_REG(&sc->hw, E1000_PBECCSTS)); else if (em_has_82575_memory_errors(&sc->hw)) @@ -6145,7 +6179,7 @@ em_add_hw_stats(struct e1000_softc *sc) SYSCTL_ADD_UQUAD(ctx, eee_list, OID_AUTO, "rx_lpi_count", CTLFLAG_RD, &stats->rlpic, "RX LPI event count"); } - if (em_has_memory_errors(&sc->hw)) { + if (em_has_memory_error_stats(&sc->hw)) { struct sysctl_oid *memerr_node; struct sysctl_oid_list *memerr_list; @@ -6153,11 +6187,17 @@ em_add_hw_stats(struct e1000_softc *sc) "memory_errors", CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, "Internal memory error indications"); memerr_list = SYSCTL_CHILDREN(memerr_node); - SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, - "fatal_resets", CTLFLAG_RD, - &sc->fatal_error_reset_count, - "Resets requested for fatal internal memory errors"); - if (em_has_pch_ecc(&sc->hw)) { + if (em_has_memory_errors(&sc->hw)) + SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, + "fatal_resets", CTLFLAG_RD, + &sc->fatal_error_reset_count, + "Resets requested for fatal internal memory errors"); + if (em_has_82571_ecc_stats(&sc->hw)) { + SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, + "detected_packet_buffer", CTLFLAG_RD, + &sc->corrected_error_packet_buffer_count, + "Detected packet-buffer ECC errors"); + } else if (em_has_pch_ecc(&sc->hw)) { SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, "corrected_packet_buffer", CTLFLAG_RD, &sc->corrected_error_packet_buffer_count,