From nobody Sun Aug 30 01:37:52 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 4hXZWP0MS9z6pt7w for ; Sun, 30 Aug 2026 01:37:53 +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 4hXZWN2SX2z3sZT for ; Sun, 30 Aug 2026 01:37:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1788053872; 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=39B47Y+vJFUzVebtf8nYZewq4mGgAPY/KYuFc3MvDnY=; b=IKHThbZMglbVfhz766C9hE4PafM1PCDW2SQ/dZi3o7ELmGM3xxF5wRRRKk3/2q2WTG8as0 NGsTpim+c/igQVwphKJHXM1do2sUgBHxOt5vh32dOO1MSmQnwX7Lehk9ZV4bdHU2v2Jr/Q 2zOw2bsRHX3L3wrx6dp9lzhbqyfyrm8MVJgqV0ZUXCL4w8lUokmz2mj6gyNZWeuoB7fNTp pIOlsJmWBHyIaABqdmY2BMFqwbQZo4P4tYdhpLbM7g9ohcMM3nYDRvn6kWV2li7n6I/JSi 2gzsUwxS4xVVr1yzvw31o8WM5HOb8dVvVKYm7EAZSjIU3L7a9Gh3p0u1wic/+w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1788053872; a=rsa-sha256; cv=none; b=K2GxTgxAhL1RfwMYciGRRflU93+xJ4l+5RGAVySe4XhfHbpOb0/jU4T8akdZXqSmdaR2Ik Tb6fgMxsXOAR5lL8gfjhT9Iwc2CV85PfmdOvNlUKM5r2qwdOZ7+rgKtDC/fWeyKi552NAO aKdGyvRLFIdXxvvwk3/+3k1jlV62qTdhJB+2qdK8wVJjGRR1ruuIjNcCJ51ds5E2k05lUS tyhWNNYsiBAbTdApyMutaB4dcB6rSEedM0pIEFyq8tnDcmKEUuo0KApdUivVFNlBsifagA TOXP7aY208h/Pacn0kc21H6IMbFloeCazlEIDkP8SGhMjJglGj65Yn3RFv+Jiw== 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=1788053872; 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=39B47Y+vJFUzVebtf8nYZewq4mGgAPY/KYuFc3MvDnY=; b=KQlSKAYJ23+bzoRkR5hl5g42Fq1+YnAcKxrYnJHltJPTWe5IsI93+hx79chkulvJv2DGRV MrTUDDcDMxkqBYpSGOzRWRxb/D7uHnG3q544fOjTPLmdBvyJA63e0pzJ4kLBzZVBP3C7b4 +7IXSg/m/LCgWhLEjKk/p1WisJUOH81R6Z6KNoKPB+DsX9OC7/YzYSl9j/Ma7NoIGvntGD YL1b6LJMoga0Ol6Jv/g7lHUo3+a67Rri/Nt3/7FQbdMlk0BvS27z+iv1RdBGT+zo3j1dCT ckQZeWRT+e3U85Tv4cfWwSNk4XuBtq/JTPRiPsGr7LSCsTsyvANcF05uvc6tIw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hXZWN10YYz14Fx for ; Sun, 30 Aug 2026 01:37:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3e7c8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Sun, 30 Aug 2026 01:37:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 9ff3e1cd3179 - stable/15 - e1000: Report 82575 memory 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: 9ff3e1cd31792202c0e7c7fdaf877e1fc6c54269 Auto-Submitted: auto-generated Date: Sun, 30 Aug 2026 01:37:52 +0000 Message-Id: <6a938970.3e7c8.7c3e2348@gitrepo.freebsd.org> The branch stable/15 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=9ff3e1cd31792202c0e7c7fdaf877e1fc6c54269 commit 9ff3e1cd31792202c0e7c7fdaf877e1fc6c54269 Author: Kevin Bowling AuthorDate: 2026-08-16 05:40:44 +0000 Commit: Kevin Bowling CommitDate: 2026-08-30 01:28:02 +0000 e1000: Report 82575 memory ECC errors 82575 exposes clear-on-read, saturating counters for corrected and uncorrected errors in the packet buffer and the receive and transmit descriptor handlers. Sample all three status registers together from the regular hardware statistics update. When an unrecoverable event interrupts first, count the values captured by the interrupt filter so the clear-on-read status is not lost before the admin task handles it. Expose packet buffer and descriptor handler counters under the existing memory_errors sysctl node. Hardware validation used an 82575EB revision 2 and the documented PBEEI, RDHEEI, and TDHEEI injectors. Correctable and uncorrectable TX/RX packet-buffer errors and receive/transmit descriptor-handler errors advanced the corresponding counters. The controls and accounting survived repeated recovery resets and an ordinary interface down/up. Sponsored by: BBOX.io (cherry picked from commit 7accd803e28cf6051cac69e614eec6f24d5c77cc) --- sys/dev/e1000/if_em.c | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c index c4c036ff17f7..10a2e97a8c02 100644 --- a/sys/dev/e1000/if_em.c +++ b/sys/dev/e1000/if_em.c @@ -2035,6 +2035,26 @@ em_fatal_error_intr_mask(struct e1000_softc *sc) return (em_memory_error_intr_mask(&sc->hw)); } +static void +em_update_82575_ecc_stats(struct e1000_softc *sc, u32 pbeccsts, + u32 rdhests, u32 tdhests) +{ + + sc->corrected_error_packet_buffer_count += + pbeccsts & E1000_ECC_82575_CORR_CNT_MASK; + sc->uncorrected_error_packet_buffer_count += + (pbeccsts & E1000_ECC_82575_UNCORR_CNT_MASK) >> + E1000_ECC_82575_UNCORR_CNT_SHIFT; + sc->corrected_error_dma_count += + (rdhests & E1000_ECC_82575_CORR_CNT_MASK) + + (tdhests & E1000_ECC_82575_CORR_CNT_MASK); + sc->uncorrected_error_dma_count += + ((rdhests & E1000_ECC_82575_UNCORR_CNT_MASK) >> + E1000_ECC_82575_UNCORR_CNT_SHIFT) + + ((tdhests & E1000_ECC_82575_UNCORR_CNT_MASK) >> + E1000_ECC_82575_UNCORR_CNT_SHIFT); +} + static void em_update_82576_ecc_counter(struct e1000_softc *sc, u32 reg, u64 *corrected, u64 *uncorrected) @@ -2267,6 +2287,8 @@ em_handle_fatal_error_admin(struct e1000_softc *sc) "PBECCSTS %#x; requesting reset\n", sc->fatal_error_pbeccsts); } else if (em_has_82575_memory_errors(&sc->hw)) { + em_update_82575_ecc_stats(sc, sc->fatal_error_pbeccsts, + sc->fatal_error_dma_rx, sc->fatal_error_dma_tx); device_printf(sc->dev, "unrecoverable internal memory ECC error: ICR %#x, " "PBECCSTS %#x, RDHESTS %#x, TDHESTS %#x; " @@ -5733,6 +5755,11 @@ em_update_stats_counters(struct e1000_softc *sc) 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)) + em_update_82575_ecc_stats(sc, + E1000_READ_REG(&sc->hw, E1000_PBECCSTS_82575), + E1000_READ_REG(&sc->hw, E1000_RDHESTS_82575), + E1000_READ_REG(&sc->hw, E1000_TDHESTS_82575)); else if (em_has_82576_memory_errors(&sc->hw)) em_update_82576_ecc_stats(sc); else if (em_has_i350_memory_errors(&sc->hw)) @@ -6042,9 +6069,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_pch_ecc(&sc->hw) || - em_has_82576_memory_errors(&sc->hw) || - em_has_i210_i350_memory_errors(&sc->hw)) { + if (em_has_memory_errors(&sc->hw)) { struct sysctl_oid *memerr_node; struct sysctl_oid_list *memerr_list; @@ -6065,6 +6090,23 @@ em_add_hw_stats(struct e1000_softc *sc) "uncorrected_packet_buffer", CTLFLAG_RD, &sc->uncorrected_error_packet_buffer_count, "Uncorrected packet-buffer ECC errors"); + } else if (em_has_82575_memory_errors(&sc->hw)) { + 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, memerr_list, OID_AUTO, + "corrected_descriptor_handler", CTLFLAG_RD, + &sc->corrected_error_dma_count, + "Corrected descriptor-handler ECC errors"); + SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, + "uncorrected_descriptor_handler", CTLFLAG_RD, + &sc->uncorrected_error_dma_count, + "Uncorrected descriptor-handler ECC errors"); } else if (em_has_82576_memory_errors(&sc->hw)) { SYSCTL_ADD_UQUAD(ctx, memerr_list, OID_AUTO, "fatal_unknown", CTLFLAG_RD,