wil6210: interrupt statistics
authorVladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Mon, 16 Jun 2014 16:37:22 +0000 (19:37 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 19 Jun 2014 19:49:26 +0000 (15:49 -0400)
Track number of interrupts and Tx/Rx packets;
expose through debugfs 'info'. Reset upon read.
Used to analyse effectivness of interrupt coalescing and NAPI.
Read twice with some interval like
cat info > /dev/null; sleep 1; cat info

Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/wil6210/debugfs.c
drivers/net/wireless/ath/wil6210/interrupt.c
drivers/net/wireless/ath/wil6210/wil6210.h

index 8bf00aca321b5de3b765439789693f7b80facae6..94ac69a380b85a72e8578071a3d6bf7452a5dc43 100644 (file)
@@ -851,10 +851,21 @@ static const struct file_operations fops_link = {
 /*---------info------------*/
 static int wil_info_debugfs_show(struct seq_file *s, void *data)
 {
+       struct wil6210_priv *wil = s->private;
+       struct net_device *ndev = wil_to_ndev(wil);
        int is_ac = power_supply_is_system_supplied();
+       int rx = atomic_xchg(&wil->isr_count_rx, 0);
+       int tx = atomic_xchg(&wil->isr_count_tx, 0);
+       static ulong rxf_old, txf_old;
+       ulong rxf = ndev->stats.rx_packets;
+       ulong txf = ndev->stats.tx_packets;
 
        /* >0 : AC; 0 : battery; <0 : error */
        seq_printf(s, "AC powered : %d\n", is_ac);
+       seq_printf(s, "Rx irqs:packets : %8d : %8ld\n", rx, rxf - rxf_old);
+       seq_printf(s, "Tx irqs:packets : %8d : %8ld\n", tx, txf - txf_old);
+       rxf_old = rxf;
+       txf_old = txf;
 
        return 0;
 }
index e4aba53c20e4d9fdf73d7055094ef31ab320ccac..67f1002a03a13a88d7224a3a8abea8f234aa9ae2 100644 (file)
@@ -208,6 +208,7 @@ static irqreturn_t wil6210_irq_rx(int irq, void *cookie)
 
        /* Rx IRQ will be enabled when NAPI processing finished */
 
+       atomic_inc(&wil->isr_count_rx);
        return IRQ_HANDLED;
 }
 
@@ -246,6 +247,7 @@ static irqreturn_t wil6210_irq_tx(int irq, void *cookie)
 
        /* Tx IRQ will be enabled when NAPI processing finished */
 
+       atomic_inc(&wil->isr_count_tx);
        return IRQ_HANDLED;
 }
 
index fd6ff0926f3b7476d0835f4d2bbdf835c4bb7cec..424906635f05dc503b5718c8e8b0f3863e500ae0 100644 (file)
@@ -412,6 +412,7 @@ struct wil6210_priv {
        struct mutex mutex; /* for wil6210_priv access in wil_{up|down} */
        /* statistics */
        struct wil6210_stats stats;
+       atomic_t isr_count_rx, isr_count_tx;
        /* debugfs */
        struct dentry *debug;
        struct debugfs_blob_wrapper fw_code_blob;