Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/x86/pci vmxnet3_softc.vmx_stats should not count gl...
details: https://anonhg.NetBSD.org/src/rev/158b1587d0f6
branches: trunk
changeset: 459188:158b1587d0f6
user: knakahara <knakahara%NetBSD.org@localhost>
date: Fri Aug 30 05:03:32 2019 +0000
description:
vmxnet3_softc.vmx_stats should not count globally. pointed out by hikaru@n.o
divide vmxnet3_softc.vmx_stats to each vmxnet3_txqueue and vmxnet3_rxqueue,
furthermore make them evcnt.
diffstat:
sys/arch/x86/pci/if_vmx.c | 48 ++++++++++++++++++++++++++++------------------
1 files changed, 29 insertions(+), 19 deletions(-)
diffs (175 lines):
diff -r 8504b37c4df0 -r 158b1587d0f6 sys/arch/x86/pci/if_vmx.c
--- a/sys/arch/x86/pci/if_vmx.c Fri Aug 30 03:34:37 2019 +0000
+++ b/sys/arch/x86/pci/if_vmx.c Fri Aug 30 05:03:32 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_vmx.c,v 1.48 2019/08/19 05:25:38 knakahara Exp $ */
+/* $NetBSD: if_vmx.c,v 1.49 2019/08/30 05:03:32 knakahara Exp $ */
/* $OpenBSD: if_vmx.c,v 1.16 2014/01/22 06:04:17 brad Exp $ */
/*
@@ -19,7 +19,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.48 2019/08/19 05:25:38 knakahara Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.49 2019/08/30 05:03:32 knakahara Exp $");
#include <sys/param.h>
#include <sys/cpu.h>
@@ -207,6 +207,8 @@
struct evcnt vxtxq_pcqdrop;
struct evcnt vxtxq_transmitdef;
struct evcnt vxtxq_watchdogto;
+ struct evcnt vxtxq_defragged;
+ struct evcnt vxtxq_defrag_failed;
};
struct vmxnet3_rxq_stats {
@@ -230,6 +232,8 @@
struct evcnt vxrxq_intr;
struct evcnt vxrxq_defer;
struct evcnt vxrxq_deferreq;
+ struct evcnt vxrxq_mgetcl_failed;
+ struct evcnt vxrxq_mbuf_load_failed;
};
struct vmxnet3_queue {
@@ -244,13 +248,6 @@
struct work vxq_wq_cookie;
};
-struct vmxnet3_statistics {
- uint32_t vmst_defragged;
- uint32_t vmst_defrag_failed;
- uint32_t vmst_mgetcl_failed;
- uint32_t vmst_mbuf_load_failed;
-};
-
struct vmxnet3_softc {
device_t vmx_dev;
struct ethercom vmx_ethercom;
@@ -281,7 +278,6 @@
int vmx_nrxdescs;
int vmx_max_rxsegs;
- struct vmxnet3_statistics vmx_stats;
struct evcnt vmx_event_intr;
struct evcnt vmx_event_link;
struct evcnt vmx_event_txqerror;
@@ -395,7 +391,8 @@
void vmxnet3_evintr(struct vmxnet3_softc *);
bool vmxnet3_txq_eof(struct vmxnet3_txqueue *, u_int);
-int vmxnet3_newbuf(struct vmxnet3_softc *, struct vmxnet3_rxring *);
+int vmxnet3_newbuf(struct vmxnet3_softc *, struct vmxnet3_rxqueue *,
+ struct vmxnet3_rxring *);
void vmxnet3_rxq_eof_discard(struct vmxnet3_rxqueue *,
struct vmxnet3_rxring *, int);
void vmxnet3_rxq_discard_chain(struct vmxnet3_rxqueue *);
@@ -1971,6 +1968,10 @@
NULL, txq->vxtxq_name, "Deferred transmit");
evcnt_attach_dynamic(&txq->vxtxq_watchdogto, EVCNT_TYPE_MISC,
NULL, txq->vxtxq_name, "Watchdog timeount");
+ evcnt_attach_dynamic(&txq->vxtxq_defragged, EVCNT_TYPE_MISC,
+ NULL, txq->vxtxq_name, "m_defrag sucessed");
+ evcnt_attach_dynamic(&txq->vxtxq_defrag_failed, EVCNT_TYPE_MISC,
+ NULL, txq->vxtxq_name, "m_defrag failed");
}
for (i = 0; i < sc->vmx_nrxqueues; i++) {
@@ -1982,6 +1983,10 @@
NULL, rxq->vxrxq_name, "Handled queue in softint/workqueue");
evcnt_attach_dynamic(&rxq->vxrxq_deferreq, EVCNT_TYPE_MISC,
NULL, rxq->vxrxq_name, "Requested in softint/workqueue");
+ evcnt_attach_dynamic(&rxq->vxrxq_mgetcl_failed, EVCNT_TYPE_MISC,
+ NULL, rxq->vxrxq_name, "MCLGET failed");
+ evcnt_attach_dynamic(&rxq->vxrxq_mbuf_load_failed, EVCNT_TYPE_MISC,
+ NULL, rxq->vxrxq_name, "bus_dmamap_load_mbuf failed");
}
evcnt_attach_dynamic(&sc->vmx_event_intr, EVCNT_TYPE_INTR,
@@ -2017,6 +2022,8 @@
evcnt_detach(&txq->vxtxq_pcqdrop);
evcnt_detach(&txq->vxtxq_transmitdef);
evcnt_detach(&txq->vxtxq_watchdogto);
+ evcnt_detach(&txq->vxtxq_defragged);
+ evcnt_detach(&txq->vxtxq_defrag_failed);
}
for (i = 0; i < sc->vmx_nrxqueues; i++) {
@@ -2025,6 +2032,8 @@
evcnt_detach(&rxq->vxrxq_intr);
evcnt_detach(&rxq->vxrxq_defer);
evcnt_detach(&rxq->vxrxq_deferreq);
+ evcnt_detach(&rxq->vxrxq_mgetcl_failed);
+ evcnt_detach(&rxq->vxrxq_mbuf_load_failed);
}
evcnt_detach(&sc->vmx_event_intr);
@@ -2154,7 +2163,8 @@
}
int
-vmxnet3_newbuf(struct vmxnet3_softc *sc, struct vmxnet3_rxring *rxr)
+vmxnet3_newbuf(struct vmxnet3_softc *sc, struct vmxnet3_rxqueue *rxq,
+ struct vmxnet3_rxring *rxr)
{
struct mbuf *m;
struct vmxnet3_rxdesc *rxd;
@@ -2180,7 +2190,7 @@
MCLGET(m, M_DONTWAIT);
if ((m->m_flags & M_EXT) == 0) {
- sc->vmx_stats.vmst_mgetcl_failed++;
+ rxq->vxrxq_mgetcl_failed.ev_count++;
m_freem(m);
return (ENOBUFS);
}
@@ -2191,7 +2201,7 @@
error = bus_dmamap_load_mbuf(sc->vmx_dmat, dmap, m, BUS_DMA_NOWAIT);
if (error) {
m_freem(m);
- sc->vmx_stats.vmst_mbuf_load_failed++;
+ rxq->vxrxq_mbuf_load_failed.ev_count++;
return (error);
}
@@ -2403,7 +2413,7 @@
goto nextp;
}
- if (vmxnet3_newbuf(sc, rxr) != 0) {
+ if (vmxnet3_newbuf(sc, rxq, rxr) != 0) {
rxq->vxrxq_stats.vmrxs_iqdrops++;
vmxnet3_rxq_eof_discard(rxq, rxr, idx);
if (!rxcd->eop)
@@ -2422,7 +2432,7 @@
/* frame not started? */
KASSERT(m_head != NULL);
- if (vmxnet3_newbuf(sc, rxr) != 0) {
+ if (vmxnet3_newbuf(sc, rxq, rxr) != 0) {
rxq->vxrxq_stats.vmrxs_iqdrops++;
vmxnet3_rxq_eof_discard(rxq, rxr, idx);
if (!rxcd->eop)
@@ -2784,7 +2794,7 @@
rxr->vxrxr_ndesc * sizeof(struct vmxnet3_rxdesc));
for (idx = 0; idx < rxr->vxrxr_ndesc; idx++) {
- error = vmxnet3_newbuf(sc, rxr);
+ error = vmxnet3_newbuf(sc, rxq, rxr);
if (error)
return (error);
}
@@ -3018,9 +3028,9 @@
if (error) {
m_freem(*m0);
*m0 = NULL;
- txq->vxtxq_sc->vmx_stats.vmst_defrag_failed++;
+ txq->vxtxq_defrag_failed.ev_count++;
} else
- txq->vxtxq_sc->vmx_stats.vmst_defragged++;
+ txq->vxtxq_defragged.ev_count++;
return (error);
}
Home |
Main Index |
Thread Index |
Old Index