Module Name: src Committed By: msaitoh Date: Thu Jan 25 05:48:56 UTC 2024
Modified Files: src/sys/dev/pci/igc: if_igc.c Log Message: igc(4): Count iqdrops. TODO: RQDPC should be visible via evcnt(9). To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/dev/pci/igc/if_igc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/igc/if_igc.c diff -u src/sys/dev/pci/igc/if_igc.c:1.9 src/sys/dev/pci/igc/if_igc.c:1.10 --- src/sys/dev/pci/igc/if_igc.c:1.9 Wed Dec 20 18:09:19 2023 +++ src/sys/dev/pci/igc/if_igc.c Thu Jan 25 05:48:56 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: if_igc.c,v 1.9 2023/12/20 18:09:19 skrll Exp $ */ +/* $NetBSD: if_igc.c,v 1.10 2024/01/25 05:48:56 msaitoh Exp $ */ /* $OpenBSD: if_igc.c,v 1.13 2023/04/28 10:18:57 bluhm Exp $ */ /*- * SPDX-License-Identifier: BSD-2-Clause @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_igc.c,v 1.9 2023/12/20 18:09:19 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_igc.c,v 1.10 2024/01/25 05:48:56 msaitoh Exp $"); #ifdef _KERNEL_OPT #include "opt_if_igc.h" @@ -1116,11 +1116,35 @@ igc_update_counters(struct igc_softc *sc /* Mac statistics */ struct igc_hw *hw = &sc->hw; + struct ifnet *ifp = &sc->sc_ec.ec_if; + uint64_t iqdrops = 0; for (int cnt = 0; cnt < IGC_MAC_COUNTERS; cnt++) { - IGC_MAC_COUNTER_ADD(sc, cnt, igc_read_mac_counter(hw, - igc_mac_counters[cnt].reg, igc_mac_counters[cnt].is64)); + uint64_t val; + bus_size_t regaddr = igc_mac_counters[cnt].reg; + + val = igc_read_mac_counter(hw, regaddr, + igc_mac_counters[cnt].is64); + IGC_MAC_COUNTER_ADD(sc, cnt, val); + /* XXX Count MPC to iqdrops. */ + if (regaddr == IGC_MPC) + iqdrops += val; } + + for (int iq = 0; iq < sc->sc_nqueues; iq++) { + uint32_t val; + + /* XXX RQDPC should be visible via evcnt(9). */ + val = IGC_READ_REG(hw, IGC_RQDPC(iq)); + + /* RQDPC is not cleard on read. */ + if (val != 0) + IGC_WRITE_REG(hw, IGC_RQDPC(iq), 0); + iqdrops += val; + } + + if (iqdrops != 0) + if_statadd(ifp, if_iqdrops, iqdrops); #endif }