diff options
author | Casey Leedom <leedom@chelsio.com> | 2010-07-08 10:05:48 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-07-08 23:48:35 -0700 |
commit | 68dc9d36c19aa1fd1633427b419d5e1f44753e8a (patch) | |
tree | 4773c01ce4f53445e961ce1256d9c59fccfeb9a2 /drivers | |
parent | fabc51a640b35a771b6c75d2186193fdaf25cf56 (diff) | |
download | linux-3.10-68dc9d36c19aa1fd1633427b419d5e1f44753e8a.tar.gz linux-3.10-68dc9d36c19aa1fd1633427b419d5e1f44753e8a.tar.bz2 linux-3.10-68dc9d36c19aa1fd1633427b419d5e1f44753e8a.zip |
cxgb4vf: Implement "Unhandled Interrupts" statistic
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/cxgb4vf/cxgb4vf_main.c | 8 | ||||
-rw-r--r-- | drivers/net/cxgb4vf/sge.c | 3 |
2 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c index bd73ff5b51b..e988031f7e8 100644 --- a/drivers/net/cxgb4vf/cxgb4vf_main.c +++ b/drivers/net/cxgb4vf/cxgb4vf_main.c @@ -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); } diff --git a/drivers/net/cxgb4vf/sge.c b/drivers/net/cxgb4vf/sge.c index 4bc1858dc30..37c6354547c 100644 --- a/drivers/net/cxgb4vf/sge.c +++ b/drivers/net/cxgb4vf/sge.c @@ -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) | |