msm: bam_dmux: Add debug statistics
Add debug statistics for BAM DMUX.
Change-Id: Ic24350b8fcabd6945f0deb8fdb3b4a7c509ff1a9
Signed-off-by: Eric Holmberg <eholmber@codeaurora.org>
diff --git a/arch/arm/mach-msm/bam_dmux.c b/arch/arm/mach-msm/bam_dmux.c
index 8ebac5b..ede298d 100644
--- a/arch/arm/mach-msm/bam_dmux.c
+++ b/arch/arm/mach-msm/bam_dmux.c
@@ -55,6 +55,7 @@
static uint32_t bam_dmux_write_cnt;
static uint32_t bam_dmux_write_cpy_cnt;
static uint32_t bam_dmux_write_cpy_bytes;
+static uint32_t bam_dmux_tx_sps_failure_cnt;
#define DBG(x...) do { \
if (msm_bam_dmux_debug_enable) \
@@ -83,11 +84,17 @@
__func__, bam_dmux_write_cpy_cnt, \
bam_dmux_write_cpy_bytes); \
} while (0)
+
+#define DBG_INC_TX_SPS_FAILURE_CNT() do { \
+ bam_dmux_tx_sps_failure_cnt++; \
+} while (0)
+
#else
#define DBG(x...) do { } while (0)
#define DBG_INC_READ_CNT(x...) do { } while (0)
#define DBG_INC_WRITE_CNT(x...) do { } while (0)
#define DBG_INC_WRITE_CPY(x...) do { } while (0)
+#define DBG_INC_TX_SPS_FAILURE_CNT() do { } while (0)
#endif
struct bam_ch_info {
@@ -377,6 +384,7 @@
DBG("%s sps_transfer_one failed rc=%d\n", __func__, rc);
spin_lock(&bam_tx_pool_spinlock);
list_del(&pkt->list_node);
+ DBG_INC_TX_SPS_FAILURE_CNT();
spin_unlock(&bam_tx_pool_spinlock);
kfree(pkt);
}
@@ -509,6 +517,7 @@
DBG("%s sps_transfer_one failed rc=%d\n", __func__, rc);
spin_lock(&bam_tx_pool_spinlock);
list_del(&pkt->list_node);
+ DBG_INC_TX_SPS_FAILURE_CNT();
spin_unlock(&bam_tx_pool_spinlock);
kfree(pkt);
}
@@ -815,6 +824,37 @@
return i;
}
+static int debug_ul_pkt_cnt(char *buf, int max)
+{
+ struct list_head *p;
+ unsigned long flags;
+ int n = 0;
+
+ spin_lock_irqsave(&bam_tx_pool_spinlock, flags);
+ __list_for_each(p, &bam_tx_pool) {
+ ++n;
+ }
+ spin_unlock_irqrestore(&bam_tx_pool_spinlock, flags);
+
+ return scnprintf(buf, max, "Number of UL packets in flight: %d\n", n);
+}
+
+static int debug_stats(char *buf, int max)
+{
+ int i = 0;
+
+ i += scnprintf(buf + i, max - i,
+ "skb copy cnt: %u\n"
+ "skb copy bytes: %u\n"
+ "sps tx failures: %u\n",
+ bam_dmux_write_cpy_cnt,
+ bam_dmux_write_cpy_bytes,
+ bam_dmux_tx_sps_failure_cnt
+ );
+
+ return i;
+}
+
#define DEBUG_BUFMAX 4096
static char debug_buffer[DEBUG_BUFMAX];
@@ -1307,8 +1347,11 @@
struct dentry *dent;
dent = debugfs_create_dir("bam_dmux", 0);
- if (!IS_ERR(dent))
+ if (!IS_ERR(dent)) {
debug_create("tbl", 0444, dent, debug_tbl);
+ debug_create("ul_pkt_cnt", 0444, dent, debug_ul_pkt_cnt);
+ debug_create("stats", 0444, dent, debug_stats);
+ }
#endif
subsys_notif_register_notifier("modem", &restart_notifier);
return platform_driver_register(&bam_dmux_driver);