From nobody Sun Aug 30 01:09:50 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 4hXYv24jpBz6ppZD for ; Sun, 30 Aug 2026 01:09:50 +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 4hXYv21ws1z3nfv for ; Sun, 30 Aug 2026 01:09:50 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788052190; 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=KHCdcIbsCuabo+EaD/yHcLjQW0OyaB5uVwKgGeXBGVg=; b=iduqF6iHPR7Aq58C0UCI2uHkpQfBD4WqJlY/GRgVcew5dXKNi0TGKGAFIybgkghFsC262O UuP7iQsjRqzPwIzlG6iyKLo2pxFvzCV/odgzkjXELnurRpafTzjIP7A163oejwxSa9SMCI 5E/y1AiEr1KWGAwnVrnOX82rTn74yS9/+2l/qT5qalQkyM8jtEQAJn1Syau6ZAR6/4mVqw ZgIy8J+coY4ZSAlazWV0JhrVUM+yg7Lx1t6rmgQ1u+3aaDkuWc4uVR7cweq8muqXiM3A/s u3mds4eCrIG0t5dA0Fp8Ln40HE2nVx3oWLRc2BS3cS8vANyn6qUEXa5niQ41Wg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788052190; a=rsa-sha256; cv=none; b=FHlp3jO4MDFuznb3b3xXUi6WHJbpenCCB/yZU51xRYYTzfoygRexMTuM2BNi0f+nw3ZD8s 0eOoocHN/Izt+t9uoaSZtzbGgBdkhp3rLbooeeyjmsHwwqjACa1ptBOZnUdMtT365gTGn6 URCAY13MF9h4NeHQi/rDWrN5I5EwUA02YKEbMkgT7txjbAyJe/K7q+h3pFSTg4dNNs0sFp TVJmkBMh5LNBbj41srbcEF5yZ9IgiQtuOxCcU8V6hLCnsTYoQqQqMSNMmAL/i864HLLCOJ uXPcEMZ9H1EFa6CFufVGF8hviVSB6j1qlBvgMHUy47ei1YAkHPLjC/qzpmDlSw== 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=1788052190; 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=KHCdcIbsCuabo+EaD/yHcLjQW0OyaB5uVwKgGeXBGVg=; b=EkiLtZ8KwP373T5VQ2NiIYxARy7JXQGluIt/sMJ9lTnpr8Dg91/cJNGWpmzCl7fn2CBJlH n/4MOwU0oNTc002YxyglIIgHxH2reNy72XHxTQjCjlJTUkltn5DPYCwUcl+p160OdPmdmu C+YrMC8qGGo+9pBLOrmJk1zK/feAthSfVEZxMuN1WOJEVXbGX/XrD1NQ8UOMLoNr7hs3vG GCuvHKbjFE0/4RIOnp/OHbM0xwoeVoRKCVbNceCCPnPlvg2mBEL1uWXfL+37brXR0qwNCS WmKT/KhOgdQs9TaLwCPQ0Tjuf+jC+MRuq+ZSkjyZrlH/R3252hK4czHkp4p4uQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hXYv208KXz13cC for ; Sun, 30 Aug 2026 01:09:50 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b7bc by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 30 Aug 2026 01:09:50 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 95429a21431f - stable/15 - e1000: Report PCH packet buffer ECC statistics 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: 95429a21431fd5aab82c175fee792cc268562da0 Auto-Submitted: auto-generated Date: Sun, 30 Aug 2026 01:09:50 +0000 Message-Id: <6a9382de.3b7bc.1a6b4568@gitrepo.freebsd.org> The branch stable/15 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=95429a21431fd5aab82c175fee792cc268562da0 commit 95429a21431fd5aab82c175fee792cc268562da0 Author: Kevin Bowling AuthorDate: 2026-08-12 18:30:08 +0000 Commit: Kevin Bowling CommitDate: 2026-08-30 01:09:39 +0000 e1000: Report PCH packet buffer ECC statistics PCH packet buffer ECC status contains read-clear byte counters for corrected and uncorrected errors. Sample them with the regular hardware statistics update and account for the snapshot captured by the fatal error interrupt path. Expose the counters and the number of reset worthy interrupt indications under dev.em.N.memory_errors. Keeping the reset counter separate also preserves evidence when another status reader wins the read-clear race. Hardware validation used an I219-LM. Three documented ICS.ECCER injections advanced fatal_resets from zero to three, exactly once per reset. corrected_packet_buffer and uncorrected_packet_buffer remained zero, as expected because ICS does not inject a memory error or alter PBECCSTS. Sponsored by: BBOX.io (cherry picked from commit d7be8a3e229174bea06228b461da3b1825c6cc54) --- sys/dev/e1000/if_em.c | 36 ++++++++++++++++++++++++++++++++++++ sys/dev/e1000/if_em.h | 2 ++ 2 files changed, 38 insertions(+) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index 74ed1d985808..f4d26e8a609e 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -1883,6 +1883,17 @@ em_fatal_error_intr_mask(struct e1000_softc *sc) return (0); } +static void +em_update_pch_ecc_stats(struct e1000_softc *sc, u32 pbeccsts) +{ + + sc->corrected_error_packet_buffer_count += + pbeccsts & E1000_PBECCSTS_CORR_ERR_CNT_MASK; + sc->uncorrected_error_packet_buffer_count += + (pbeccsts & E1000_PBECCSTS_UNCORR_ERR_CNT_MASK) >> + E1000_PBECCSTS_UNCORR_ERR_CNT_SHIFT; +} + /* * Descriptor-memory ECC errors stop the PCH MAC. Capture the read-clear * status before handing recovery to the iflib admin task. @@ -1916,6 +1927,7 @@ em_handle_fatal_error_admin(struct e1000_softc *sc) return (atomic_load_acq_32(&sc->fatal_error_state) != EM_FATAL_ERROR_NONE); + em_update_pch_ecc_stats(sc, sc->fatal_error_pbeccsts); device_printf(sc->dev, "uncorrectable packet-buffer ECC error: PBECCSTS %#x; " "requesting reset\n", sc->fatal_error_pbeccsts); @@ -5187,6 +5199,10 @@ em_update_stats_counters(struct e1000_softc *sc) stats->tsctfc += E1000_READ_REG(&sc->hw, E1000_TSCTFC); } + + if (em_has_pch_ecc(&sc->hw)) + em_update_pch_ecc_stats(sc, + E1000_READ_REG(&sc->hw, E1000_PBECCSTS)); } static bool @@ -5490,6 +5506,26 @@ 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_pch_ecc(&sc->hw)) { + struct sysctl_oid *memerr_node; + struct sysctl_oid_list *memerr_list; + + memerr_node = SYSCTL_ADD_NODE(ctx, child, OID_AUTO, + "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 packet-buffer ECC errors"); + SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, + "corrected_packet_buffer", CTLFLAG_RD, + &sc->corrected_error_packet_buffer_count, + "Corrected packet-buffer ECC errors"); + SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, + "uncorrected_packet_buffer", CTLFLAG_RD, + &sc->uncorrected_error_packet_buffer_count, + "Uncorrected packet-buffer ECC errors"); + } SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "excess_coll", CTLFLAG_RD, &stats->ecol, diff --git a/sys/dev/e1000/if_em.h b/sys/dev/e1000/if_em.h index 47acdd9ed8d5..8928e35fb7c3 100644 --- a/sys/dev/e1000/if_em.h +++ b/sys/dev/e1000/if_em.h @@ -621,6 +621,8 @@ struct e1000_softc { u32 fatal_error_state; u32 fatal_error_pbeccsts; u64 fatal_error_reset_count; + u64 corrected_error_packet_buffer_count; + u64 uncorrected_error_packet_buffer_count; u64 que_mask;