From nobody Mon Aug 17 00:25:52 2026 X-Original-To: dev-commits-src-branches@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 4hNYXJ5JwYz6X1FS for ; Mon, 17 Aug 2026 00:25:52 +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 4hNYXJ43dXz3fPC for ; Mon, 17 Aug 2026 00:25:52 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786926352; 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=NNuSuJpslcg4Q33lNGbE6UdllodvGOKx4yzedPuyQPg=; b=QcJ7KKcm/JoEu54FhN+/PZE0d99yUmGOjs2u/CYJ3EePumNkZxCyV7FO8cjaoHP+ZWyiFx 3AeHh3Gr3uiQT/zNoou07AK0ErsLcdDNFbYdbAGXx2oH88Pisr4WoCxPG8oXevtwroVZdo hpVpNKjy/Zh9qh8QGgskbrfF3pKduPJHDO8HQca59V/XMHO69XTxqnh3aZxmyHnm3zFqWg eSVPgEZ+rzzTHZWtf/84DwZyh/dFQhODQ5AWItDPDONQ6KF/BVfKHvEpLmuSmF0hbPu8dm RI6wqzu3h5luoUTjrxTRpkJnC/N0bKA96nhIup+/QdaQS6vBARj0UA1HGiEhpA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786926352; a=rsa-sha256; cv=none; b=TyBhEPcXcCWXeK+khuIZED05PCpU2w2/qrpzNTAHyxqw8U6+v8H3r6M/7wrPbxGFRqPWSD /LA4Z7J+XDfkjMsg9NuI+sL87BfEDPZc9YDZcqMk15/8g8Gib9EYDy55hBd8kRLNP6Koh8 af82jUtApryq3Euydqs2c/n3gD3H7MhaVARUuh/xoTILzxgho1rR1sMld0f+kSpTqJP0ac s11EIsHXanAnnY/h6AKtpB4mGNsxQf0f8apczdmdpu7aKv6vhqMIXCAf+aGvNyh6/fyWKI t3RHliom/aRV+KlSnCn1yRUGarhKW6Gg8HlOmVng8lKhuGlsUnzwhxVicaHr8Q== 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=1786926352; 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=NNuSuJpslcg4Q33lNGbE6UdllodvGOKx4yzedPuyQPg=; b=aitUyRyF5DznYKdAD5Ig1U7WRLLFxqY4h/79ZrS9ktCD7uOUxM7VCkRZXzIOhI3WG1bvEX W31Py5142sVtTDKlrm8h+xqsM+2PFK3oEYw5a+PhfttR/D4NkQRf+3IzGn965It8vItgl1 NKiVvFGhoG0YfNQnnn8VKiVfTlB7F6ELna5eFD4ulMgkdp1rAIpchBbnboofn1cC2R9eUa 86EizIKKXRP80WmVvJr4DdmI78HyVWp0HO6fv9cPItVRsRGvv/9qKSijfUvi4l/UacdzG1 UDfUHR9EAunzPI1CRhzsLlgglXQLIhHTmreovt+HJpg5Fk6OssFU6vzgIKVd+w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hNYXJ2XJSzrRS for ; Mon, 17 Aug 2026 00:25:52 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37f58 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 17 Aug 2026 00:25:52 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 49c6cf85f732 - stable/15 - igc: Correct hardware error statistics List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@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: 49c6cf85f732c15253f9d2bdcab6a5915b7ba65d Auto-Submitted: auto-generated Date: Mon, 17 Aug 2026 00:25:52 +0000 Message-Id: <6a825510.37f58.3b47ed7b@gitrepo.freebsd.org> The branch stable/15 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=49c6cf85f732c15253f9d2bdcab6a5915b7ba65d commit 49c6cf85f732c15253f9d2bdcab6a5915b7ba65d Author: Kevin Bowling AuthorDate: 2026-08-03 10:31:36 +0000 Commit: Kevin Bowling CommitDate: 2026-08-17 00:25:23 +0000 igc: Correct hardware error statistics Track RERC separately instead of adding receive errors to the collision count, and read the previously omitted RXERRC register. Include RFC in input errors because CRCERRS does not count bad-CRC runts, implementing the I225 length-error accounting workaround alongside RUC and ROC. Stop treating host transmit MAC discards as receive errors. Expose both RERC and HTDPMC as dedicated MAC statistics so their overlapping counts remain available without corrupting aggregate interface counters. (cherry picked from commit a108ee9138a698f212d6d6832d54e88ce6786617) --- sys/dev/igc/if_igc.c | 17 ++++++++++++++--- sys/dev/igc/igc_hw.h | 1 + sys/dev/igc/igc_mac.c | 1 + sys/dev/igc/igc_regs.h | 1 + 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/sys/dev/igc/if_igc.c b/sys/dev/igc/if_igc.c index 17784f5f5f43..ec2f6a2fa7b9 100644 --- a/sys/dev/igc/if_igc.c +++ b/sys/dev/igc/if_igc.c @@ -2600,6 +2600,7 @@ igc_update_stats_counters(struct igc_softc *sc) u64 prev_xoffrxc = sc->stats.xoffrxc; sc->stats.crcerrs += IGC_READ_REG(&sc->hw, IGC_CRCERRS); + sc->stats.rxerrc += IGC_READ_REG(&sc->hw, IGC_RXERRC); sc->stats.mpc += IGC_READ_REG(&sc->hw, IGC_MPC); sc->stats.scc += IGC_READ_REG(&sc->hw, IGC_SCC); sc->stats.ecol += IGC_READ_REG(&sc->hw, IGC_ECOL); @@ -2607,7 +2608,7 @@ igc_update_stats_counters(struct igc_softc *sc) sc->stats.mcc += IGC_READ_REG(&sc->hw, IGC_MCC); sc->stats.latecol += IGC_READ_REG(&sc->hw, IGC_LATECOL); sc->stats.colc += IGC_READ_REG(&sc->hw, IGC_COLC); - sc->stats.colc += IGC_READ_REG(&sc->hw, IGC_RERC); + sc->stats.rerc += IGC_READ_REG(&sc->hw, IGC_RERC); sc->stats.dc += IGC_READ_REG(&sc->hw, IGC_DC); sc->stats.rlec += IGC_READ_REG(&sc->hw, IGC_RLEC); sc->stats.xonrxc += IGC_READ_REG(&sc->hw, IGC_XONRXC); @@ -2686,10 +2687,14 @@ igc_if_get_counter(if_ctx_t ctx, ift_counter cnt) case IFCOUNTER_COLLISIONS: return (sc->stats.colc); case IFCOUNTER_IERRORS: + /* + * RERC overlaps the counters below and, on I225, omits length + * errors. RFC covers bad-CRC runts that CRCERRS does not count. + */ return (sc->dropped_pkts + sc->stats.rxerrc + sc->stats.crcerrs + sc->stats.algnerrc + - sc->stats.ruc + sc->stats.roc + - sc->stats.mpc + sc->stats.htdpmc); + sc->stats.ruc + sc->stats.rfc + sc->stats.roc + + sc->stats.mpc); case IFCOUNTER_OERRORS: return (sc->stats.ecol + sc->stats.latecol + sc->watchdog_events); @@ -2912,6 +2917,9 @@ igc_add_hw_stats(struct igc_softc *sc) SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_errs", CTLFLAG_RD, &sc->stats.rxerrc, "Receive Errors"); + SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "recv_error_count", + CTLFLAG_RD, &sc->stats.rerc, + "Receive Error Count (RERC)"); SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "crc_errs", CTLFLAG_RD, &sc->stats.crcerrs, "CRC errors"); @@ -2988,6 +2996,9 @@ igc_add_hw_stats(struct igc_softc *sc) SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "good_pkts_txd", CTLFLAG_RD, &sc->stats.gptc, "Good Packets Transmitted"); + SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "host_tx_discarded", + CTLFLAG_RD, &sc->stats.htdpmc, + "Host Packets Discarded by Transmit MAC"); SYSCTL_ADD_UQUAD(ctx, stat_list, OID_AUTO, "bcast_pkts_txd", CTLFLAG_RD, &sc->stats.bptc, "Broadcast Packets Transmitted"); diff --git a/sys/dev/igc/igc_hw.h b/sys/dev/igc/igc_hw.h index 864564c42a22..001c2f0b104a 100644 --- a/sys/dev/igc/igc_hw.h +++ b/sys/dev/igc/igc_hw.h @@ -275,6 +275,7 @@ struct igc_hw_stats { u64 mcc; u64 latecol; u64 colc; + u64 rerc; u64 dc; u64 tncrs; u64 sec; diff --git a/sys/dev/igc/igc_mac.c b/sys/dev/igc/igc_mac.c index ab49708837cc..2afba299e147 100644 --- a/sys/dev/igc/igc_mac.c +++ b/sys/dev/igc/igc_mac.c @@ -408,6 +408,7 @@ void igc_clear_hw_cntrs_base_generic(struct igc_hw *hw) DEBUGFUNC("igc_clear_hw_cntrs_base_generic"); IGC_READ_REG(hw, IGC_CRCERRS); + IGC_READ_REG(hw, IGC_RXERRC); IGC_READ_REG(hw, IGC_MPC); IGC_READ_REG(hw, IGC_SCC); IGC_READ_REG(hw, IGC_ECOL); diff --git a/sys/dev/igc/igc_regs.h b/sys/dev/igc/igc_regs.h index 17fa89e492e8..f4690e24c2af 100644 --- a/sys/dev/igc/igc_regs.h +++ b/sys/dev/igc/igc_regs.h @@ -150,6 +150,7 @@ /* Statistics Register Descriptions */ #define IGC_CRCERRS 0x04000 /* CRC Error Count - R/clr */ #define IGC_ALGNERRC 0x04004 /* Alignment Error Count - R/clr */ +#define IGC_RXERRC 0x0400C /* Receive Error Count - R/clr */ #define IGC_MPC 0x04010 /* Missed Packet Count - R/clr */ #define IGC_SCC 0x04014 /* Single Collision Count - R/clr */ #define IGC_ECOL 0x04018 /* Excessive Collision Count - R/clr */