cxgb4vf: Implement "Unhandled Interrupts" statistic
authorCasey Leedom <leedom@chelsio.com>
Thu, 8 Jul 2010 17:05:48 +0000 (10:05 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 9 Jul 2010 06:48:35 +0000 (23:48 -0700)
Implement "Unhandled Interrupts" statistic so we can detect when the
hardware tells us that it things we have work to do but we don't find
anything ...

Signed-off-by: Casey Leedom <leedom@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/cxgb4vf/cxgb4vf_main.c
drivers/net/cxgb4vf/sge.c

index bd73ff5b51b7402a53a6615b87c2ffc56fd4bd84..e988031f7e8645fbe60e8f123d115e9e920e45bb 100644 (file)
@@ -1790,7 +1790,7 @@ static int sge_qstats_show(struct seq_file *seq, void *v)
                  (rxq[qs].rspq.netdev
                   ? rxq[qs].rspq.netdev->name
                   : "N/A"));
-               R3("u", "RspQNullInts", rspq.unhandled_irqs);
+               R3("u", "RspQNullInts:", rspq.unhandled_irqs);
                R("RxPackets:", stats.pkts);
                R("RxCSO:", stats.rx_cso);
                R("VLANxtract:", stats.vlan_ex);
@@ -1814,14 +1814,16 @@ static int sge_qstats_show(struct seq_file *seq, void *v)
                const struct sge_rspq *evtq = &adapter->sge.fw_evtq;
 
                seq_printf(seq, "%-8s %16s\n", "QType:", "FW event queue");
-               /* no real response queue statistics available to display */
+               seq_printf(seq, "%-16s %8u\n", "RspQNullInts:",
+                          evtq->unhandled_irqs);
                seq_printf(seq, "%-16s %8u\n", "RspQ CIdx:", evtq->cidx);
                seq_printf(seq, "%-16s %8u\n", "RspQ Gen:", evtq->gen);
        } else if (r == 1) {
                const struct sge_rspq *intrq = &adapter->sge.intrq;
 
                seq_printf(seq, "%-8s %16s\n", "QType:", "Interrupt Queue");
-               /* no real response queue statistics available to display */
+               seq_printf(seq, "%-16s %8u\n", "RspQNullInts:",
+                          intrq->unhandled_irqs);
                seq_printf(seq, "%-16s %8u\n", "RspQ CIdx:", intrq->cidx);
                seq_printf(seq, "%-16s %8u\n", "RspQ Gen:", intrq->gen);
        }
index 4bc1858dc3032af4d8836eea617f2f10c7638b3c..37c6354547c7eca2eff8387f4ab7f1bc0771c0a8 100644 (file)
@@ -1772,6 +1772,9 @@ static int napi_rx_handler(struct napi_struct *napi, int budget)
        } else
                intr_params = QINTR_TIMER_IDX(SGE_TIMER_UPD_CIDX);
 
+       if (unlikely(work_done == 0))
+               rspq->unhandled_irqs++;
+
        t4_write_reg(rspq->adapter,
                     T4VF_SGE_BASE_ADDR + SGE_VF_GTS,
                     CIDXINC(work_done) |