From nobody Mon Aug 17 00:27:27 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 4hNYZ75xgmz6X1nP for ; Mon, 17 Aug 2026 00:27:27 +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 4hNYZ73GSTz3fsP for ; Mon, 17 Aug 2026 00:27:27 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786926447; 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=PkDb4sk9DlfREb8bBFWu958gpunIj/xIxfoH60seU3Y=; b=GOuIBEW46cmqAxApkmC9LPtYkMFOIGr29sZXdu1UjbhOCWIDoG6O6QDI4Nr6iwoVzuwFit DVSkekhMOtQ7cQjMovLhX/pGegUD34lbqgHenRSvIJvtW7jqPg8MTvV2eFWz5paOakd7Ls yq6zOALDazMrLkAtvB2VSkcxqOa4X3c5q4y+uAeAdJyshk3SWFjNPGoYGtb8x639Nr2GN0 5fTgJc+dyUJo+Jwilh+SmjA2y6lZx9ARlb70rqjzfFV4ZgEZYQeEutJerRmF0PNs8geHeX pD1uubDS1A0gh4Owb+7zVp6TS/Ci1iCcqPIWFH1FmGDv7gEXMU9tLTavhJz8xg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786926447; a=rsa-sha256; cv=none; b=NW/1bD1mcsGL1qG/FPWd5BoASJAYWB7j5n7VkD/tddjRSrpw3tKZYLyJEZ3pMqX8pGjFpx BmClKxt3Jrosm4+A46smCyhN0iOQxb+xYfSg9Z3CW1/PViEL3VznCAz6MC0G6+g+djc+1e Cx+26Qwx1t73gwdLwhvEE3Vf08o/pQr28hAWfaZEfpejslHZ3n3bcgke2bgwTO9tpk4o8G 6WG6LptCi05RukXNXz8h2J9/ITv0nx6YmVd5iS7aJKi+ToyoDjtegx4vB6pvFp2VPLSko8 TmZNV/zI0UrtuPtLk9rbN713DdrCWe+DwTyCdnrDRAnqp3LuiaV+Hza2NcS45g== 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=1786926447; 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=PkDb4sk9DlfREb8bBFWu958gpunIj/xIxfoH60seU3Y=; b=l72ekUrz3Nm15zepq7r9YwzOmKazt+AdTwPoUSMVpO7o9AEdNLjwqgHtfT3/MFtUq13mvQ Cdn2z9/U3B375TUebO8oQCpccbtIdpK482s5XP8dm2/kM6wAOxB0fqMUIXf70xLsd1VtuG 76qrrSuzzDRQZpHqBMuFfb4V3Pge1tj/vLYYa4eTSJ5fVHLE+SY44MwO3rrHDsf4wT4kDg /iTXAzTZLuTs4ip0qAIlxpjqu5jDJ44eXcSEITJYCz+qsC7LM1pKUHRixKHXfGrnZ+9CZQ 1GAXhRD/Uvznw52GDrUkI8RKbrfDSk1TfP8+h67a48ZM32FNMCTBUT313CAE4A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hNYZ723FhzrP4 for ; Mon, 17 Aug 2026 00:27:27 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 36a6f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 17 Aug 2026 00:27:27 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 94596f92c690 - stable/14 - 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/14 X-Git-Reftype: branch X-Git-Commit: 94596f92c690b0ce68452b8f70e3358b57b86b25 Auto-Submitted: auto-generated Date: Mon, 17 Aug 2026 00:27:27 +0000 Message-Id: <6a82556f.36a6f.7beccc4b@gitrepo.freebsd.org> The branch stable/14 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=94596f92c690b0ce68452b8f70e3358b57b86b25 commit 94596f92c690b0ce68452b8f70e3358b57b86b25 Author: Kevin Bowling AuthorDate: 2026-08-03 10:31:36 +0000 Commit: Kevin Bowling CommitDate: 2026-08-17 00:27:11 +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 2c276533026e..d9e2128d33eb 100644 --- a/sys/dev/igc/if_igc.c +++ b/sys/dev/igc/if_igc.c @@ -2698,6 +2698,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); @@ -2705,7 +2706,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); @@ -2784,10 +2785,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); @@ -3010,6 +3015,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"); @@ -3086,6 +3094,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 */