aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/cxgb4vf
diff options
context:
space:
mode:
authorCasey Leedom <leedom@chelsio.com>2010-07-08 10:05:48 -0700
committerDavid S. Miller <davem@davemloft.net>2010-07-08 23:48:35 -0700
commit68dc9d36c19aa1fd1633427b419d5e1f44753e8a (patch)
tree4773c01ce4f53445e961ce1256d9c59fccfeb9a2 /drivers/net/cxgb4vf
parentfabc51a640b35a771b6c75d2186193fdaf25cf56 (diff)
downloadkernel_samsung_smdk4412-68dc9d36c19aa1fd1633427b419d5e1f44753e8a.zip
kernel_samsung_smdk4412-68dc9d36c19aa1fd1633427b419d5e1f44753e8a.tar.gz
kernel_samsung_smdk4412-68dc9d36c19aa1fd1633427b419d5e1f44753e8a.tar.bz2
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/net/cxgb4vf')
-rw-r--r--drivers/net/cxgb4vf/cxgb4vf_main.c8
-rw-r--r--drivers/net/cxgb4vf/sge.c3
2 files changed, 8 insertions, 3 deletions
diff --git a/drivers/net/cxgb4vf/cxgb4vf_main.c b/drivers/net/cxgb4vf/cxgb4vf_main.c
index bd73ff5..e988031 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 4bc1858..37c6354 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) |