Module Name: src
Committed By: msaitoh
Date: Wed Mar 7 03:29:10 UTC 2018
Modified Files:
src/sys/dev/pci/ixgbe: ixgbe.c ixgbe.h ixv.c
Log Message:
- Make "Handled queue in softint" and "Requeued in softint" evcnt(9) per queue
and count them correctly.
- Remove #if 0'ed code.
To generate a diff of this commit:
cvs rdiff -u -r1.128 -r1.129 src/sys/dev/pci/ixgbe/ixgbe.c
cvs rdiff -u -r1.33 -r1.34 src/sys/dev/pci/ixgbe/ixgbe.h
cvs rdiff -u -r1.84 -r1.85 src/sys/dev/pci/ixgbe/ixv.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/ixgbe/ixgbe.c
diff -u src/sys/dev/pci/ixgbe/ixgbe.c:1.128 src/sys/dev/pci/ixgbe/ixgbe.c:1.129
--- src/sys/dev/pci/ixgbe/ixgbe.c:1.128 Fri Mar 2 10:19:20 2018
+++ src/sys/dev/pci/ixgbe/ixgbe.c Wed Mar 7 03:29:10 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.c,v 1.128 2018/03/02 10:19:20 knakahara Exp $ */
+/* $NetBSD: ixgbe.c,v 1.129 2018/03/07 03:29:10 msaitoh Exp $ */
/******************************************************************************
@@ -1686,10 +1686,6 @@ ixgbe_add_hw_stats(struct adapter *adapt
const char *xname = device_xname(dev);
/* Driver Statistics */
- evcnt_attach_dynamic(&adapter->handleq, EVCNT_TYPE_MISC,
- NULL, xname, "Handled queue in softint");
- evcnt_attach_dynamic(&adapter->req, EVCNT_TYPE_MISC,
- NULL, xname, "Requeued in softint");
evcnt_attach_dynamic(&adapter->efbig_tx_dma_setup, EVCNT_TYPE_MISC,
NULL, xname, "Driver tx dma soft fail EFBIG");
evcnt_attach_dynamic(&adapter->mbuf_defrag_failed, EVCNT_TYPE_MISC,
@@ -1736,15 +1732,6 @@ ixgbe_add_hw_stats(struct adapter *adapt
(void *)&adapter->queues[i], 0, CTL_CREATE, CTL_EOL) != 0)
break;
-#if 0 /* XXX msaitoh */
- if (sysctl_createv(log, 0, &rnode, &cnode,
- CTLFLAG_READONLY, CTLTYPE_QUAD,
- "irqs", SYSCTL_DESCR("irqs on this queue"),
- NULL, 0, &(adapter->queues[i].irqs),
- 0, CTL_CREATE, CTL_EOL) != 0)
- break;
-#endif
-
if (sysctl_createv(log, 0, &rnode, &cnode,
CTLFLAG_READONLY, CTLTYPE_INT,
"txd_head", SYSCTL_DESCR("Transmit Descriptor Head"),
@@ -1761,6 +1748,11 @@ ixgbe_add_hw_stats(struct adapter *adapt
evcnt_attach_dynamic(&adapter->queues[i].irqs, EVCNT_TYPE_INTR,
NULL, adapter->queues[i].evnamebuf, "IRQs on queue");
+ evcnt_attach_dynamic(&adapter->queues[i].handleq,
+ EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
+ "Handled queue in softint");
+ evcnt_attach_dynamic(&adapter->queues[i].req, EVCNT_TYPE_MISC,
+ NULL, adapter->queues[i].evnamebuf, "Requeued in softint");
evcnt_attach_dynamic(&txr->tso_tx, EVCNT_TYPE_MISC,
NULL, adapter->queues[i].evnamebuf, "TSO");
evcnt_attach_dynamic(&txr->no_desc_avail, EVCNT_TYPE_MISC,
@@ -1981,8 +1973,6 @@ ixgbe_clear_evcnt(struct adapter *adapte
struct ixgbe_hw *hw = &adapter->hw;
struct ixgbe_hw_stats *stats = &adapter->stats.pf;
- adapter->handleq.ev_count = 0;
- adapter->req.ev_count = 0;
adapter->efbig_tx_dma_setup.ev_count = 0;
adapter->mbuf_defrag_failed.ev_count = 0;
adapter->efbig2_tx_dma_setup.ev_count = 0;
@@ -1997,6 +1987,8 @@ ixgbe_clear_evcnt(struct adapter *adapte
txr = adapter->tx_rings;
for (int i = 0; i < adapter->num_queues; i++, rxr++, txr++) {
adapter->queues[i].irqs.ev_count = 0;
+ adapter->queues[i].handleq.ev_count = 0;
+ adapter->queues[i].req.ev_count = 0;
txr->no_desc_avail.ev_count = 0;
txr->total_packets.ev_count = 0;
txr->tso_tx.ev_count = 0;
@@ -2535,6 +2527,7 @@ ixgbe_msix_que(void *arg)
no_calc:
if (more) {
+ que->req.ev_count++;
if (adapter->txrx_use_workqueue) {
/*
* adapter->que_wq is bound to each CPU instead of
@@ -3376,8 +3369,6 @@ ixgbe_detach(device_t dev, int flags)
if_percpuq_destroy(adapter->ipq);
sysctl_teardown(&adapter->sysctllog);
- evcnt_detach(&adapter->handleq);
- evcnt_detach(&adapter->req);
evcnt_detach(&adapter->efbig_tx_dma_setup);
evcnt_detach(&adapter->mbuf_defrag_failed);
evcnt_detach(&adapter->efbig2_tx_dma_setup);
@@ -3392,6 +3383,8 @@ ixgbe_detach(device_t dev, int flags)
txr = adapter->tx_rings;
for (int i = 0; i < adapter->num_queues; i++, rxr++, txr++) {
evcnt_detach(&adapter->queues[i].irqs);
+ evcnt_detach(&adapter->queues[i].handleq);
+ evcnt_detach(&adapter->queues[i].req);
evcnt_detach(&txr->no_desc_avail);
evcnt_detach(&txr->total_packets);
evcnt_detach(&txr->tso_tx);
@@ -4724,9 +4717,10 @@ ixgbe_legacy_irq(void *arg)
(eicr & IXGBE_EICR_GPI_SDP0_X540))
softint_schedule(adapter->phy_si);
- if (more)
+ if (more) {
+ que->req.ev_count++;
softint_schedule(que->que_si);
- else
+ } else
ixgbe_enable_intr(adapter);
return 1;
@@ -5825,7 +5819,7 @@ ixgbe_handle_que(void *context)
struct ifnet *ifp = adapter->ifp;
bool more = false;
- adapter->handleq.ev_count++;
+ que->handleq.ev_count++;
if (ifp->if_flags & IFF_RUNNING) {
more = ixgbe_rxeof(que);
@@ -5843,6 +5837,7 @@ ixgbe_handle_que(void *context)
}
if (more) {
+ que->req.ev_count++;
if (adapter->txrx_use_workqueue) {
/*
* "enqueued flag" is not required here.
Index: src/sys/dev/pci/ixgbe/ixgbe.h
diff -u src/sys/dev/pci/ixgbe/ixgbe.h:1.33 src/sys/dev/pci/ixgbe/ixgbe.h:1.34
--- src/sys/dev/pci/ixgbe/ixgbe.h:1.33 Tue Mar 6 03:47:23 2018
+++ src/sys/dev/pci/ixgbe/ixgbe.h Wed Mar 7 03:29:10 2018
@@ -1,4 +1,4 @@
-/* $NetBSD: ixgbe.h,v 1.33 2018/03/06 03:47:23 msaitoh Exp $ */
+/* $NetBSD: ixgbe.h,v 1.34 2018/03/07 03:29:10 msaitoh Exp $ */
/******************************************************************************
SPDX-License-Identifier: BSD-3-Clause
@@ -335,6 +335,8 @@ struct ix_queue {
struct work wq_cookie;
void *que_si;
struct evcnt irqs;
+ struct evcnt handleq;
+ struct evcnt req;
char namebuf[32];
char evnamebuf[32];
@@ -566,8 +568,6 @@ struct adapter {
struct evcnt tso_err;
struct evcnt watchdog_events;
struct evcnt link_irq;
- struct evcnt handleq;
- struct evcnt req;
union {
struct ixgbe_hw_stats pf;
Index: src/sys/dev/pci/ixgbe/ixv.c
diff -u src/sys/dev/pci/ixgbe/ixv.c:1.84 src/sys/dev/pci/ixgbe/ixv.c:1.85
--- src/sys/dev/pci/ixgbe/ixv.c:1.84 Fri Mar 2 10:21:01 2018
+++ src/sys/dev/pci/ixgbe/ixv.c Wed Mar 7 03:29:10 2018
@@ -1,4 +1,4 @@
-/*$NetBSD: ixv.c,v 1.84 2018/03/02 10:21:01 knakahara Exp $*/
+/*$NetBSD: ixv.c,v 1.85 2018/03/07 03:29:10 msaitoh Exp $*/
/******************************************************************************
@@ -640,8 +640,6 @@ ixv_detach(device_t dev, int flags)
if_percpuq_destroy(adapter->ipq);
sysctl_teardown(&adapter->sysctllog);
- evcnt_detach(&adapter->handleq);
- evcnt_detach(&adapter->req);
evcnt_detach(&adapter->efbig_tx_dma_setup);
evcnt_detach(&adapter->mbuf_defrag_failed);
evcnt_detach(&adapter->efbig2_tx_dma_setup);
@@ -656,6 +654,8 @@ ixv_detach(device_t dev, int flags)
txr = adapter->tx_rings;
for (int i = 0; i < adapter->num_queues; i++, rxr++, txr++) {
evcnt_detach(&adapter->queues[i].irqs);
+ evcnt_detach(&adapter->queues[i].handleq);
+ evcnt_detach(&adapter->queues[i].req);
evcnt_detach(&txr->no_desc_avail);
evcnt_detach(&txr->total_packets);
evcnt_detach(&txr->tso_tx);
@@ -959,9 +959,10 @@ ixv_msix_que(void *arg)
rxr->packets = 0;
no_calc:
- if (more)
+ if (more) {
+ que->req.ev_count++;
softint_schedule(que->que_si);
- else /* Re-enable this interrupt */
+ } else /* Re-enable this interrupt */
ixv_enable_queue(adapter, que->msix);
return 1;
@@ -2341,10 +2342,6 @@ ixv_add_stats_sysctls(struct adapter *ad
const char *xname = device_xname(dev);
/* Driver Statistics */
- evcnt_attach_dynamic(&adapter->handleq, EVCNT_TYPE_MISC,
- NULL, xname, "Handled queue in softint");
- evcnt_attach_dynamic(&adapter->req, EVCNT_TYPE_MISC,
- NULL, xname, "Requeued in softint");
evcnt_attach_dynamic(&adapter->efbig_tx_dma_setup, EVCNT_TYPE_MISC,
NULL, xname, "Driver tx dma soft fail EFBIG");
evcnt_attach_dynamic(&adapter->mbuf_defrag_failed, EVCNT_TYPE_MISC,
@@ -2391,15 +2388,6 @@ ixv_add_stats_sysctls(struct adapter *ad
(void *)&adapter->queues[i], 0, CTL_CREATE, CTL_EOL) != 0)
break;
-#if 0
- if (sysctl_createv(log, 0, &rnode, &cnode,
- CTLFLAG_READONLY, CTLTYPE_QUAD,
- "irqs", SYSCTL_DESCR("irqs on this queue"),
- NULL, 0, &(adapter->queues[i].irqs),
- 0, CTL_CREATE, CTL_EOL) != 0)
- break;
-#endif
-
if (sysctl_createv(log, 0, &rnode, &cnode,
CTLFLAG_READONLY, CTLTYPE_INT,
"txd_head", SYSCTL_DESCR("Transmit Descriptor Head"),
@@ -2416,6 +2404,11 @@ ixv_add_stats_sysctls(struct adapter *ad
evcnt_attach_dynamic(&adapter->queues[i].irqs, EVCNT_TYPE_INTR,
NULL, adapter->queues[i].evnamebuf, "IRQs on queue");
+ evcnt_attach_dynamic(&adapter->queues[i].handleq,
+ EVCNT_TYPE_MISC, NULL, adapter->queues[i].evnamebuf,
+ "Handled queue in softint");
+ evcnt_attach_dynamic(&adapter->queues[i].req, EVCNT_TYPE_MISC,
+ NULL, adapter->queues[i].evnamebuf, "Requeued in softint");
evcnt_attach_dynamic(&txr->tso_tx, EVCNT_TYPE_MISC,
NULL, adapter->queues[i].evnamebuf, "TSO");
evcnt_attach_dynamic(&txr->no_desc_avail, EVCNT_TYPE_MISC,
@@ -2804,7 +2797,7 @@ ixv_handle_que(void *context)
struct ifnet *ifp = adapter->ifp;
bool more;
- adapter->handleq.ev_count++;
+ que->handleq.ev_count++;
if (ifp->if_flags & IFF_RUNNING) {
more = ixgbe_rxeof(que);
@@ -2820,7 +2813,7 @@ ixv_handle_que(void *context)
ixgbe_legacy_start_locked(ifp, txr);
IXGBE_TX_UNLOCK(txr);
if (more) {
- adapter->req.ev_count++;
+ que->req.ev_count++;
if (adapter->txrx_use_workqueue) {
/*
* "enqueued flag" is not required here