summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRajeev Kumar <rajekuma@codeaurora.org>2017-06-23 11:02:28 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-07-04 23:26:26 -0700
commit90cd8b4e9e48c6db7ff1699b5bcfd7070bfe5544 (patch)
tree759a991b6786be4181a22b1184c82b910cc66838
parent7cd925f91c992115f432fba44b62004b2f1d76d4 (diff)
qcacmn: Add QDF debug capability to track total SKB allocation
Enhance existing SKB leak debug capability to track total SKB allocation by driver in SLUB debug enabled builds. Change-Id: I6bb19ab482961febd8bb5adebe8f71e732ff60dd CRs-Fixed: 2066205
-rw-r--r--qdf/inc/qdf_mem.h15
-rw-r--r--qdf/linux/src/qdf_mem.c17
-rw-r--r--qdf/linux/src/qdf_nbuf.c2
3 files changed, 34 insertions, 0 deletions
diff --git a/qdf/inc/qdf_mem.h b/qdf/inc/qdf_mem.h
index d181c95c8503..f7f5d079bebe 100644
--- a/qdf/inc/qdf_mem.h
+++ b/qdf/inc/qdf_mem.h
@@ -291,5 +291,20 @@ void qdf_mem_multi_pages_free(qdf_device_t osdev,
struct qdf_mem_multi_page_t *pages,
qdf_dma_context_t memctxt, bool cacheable);
+/**
+ * qdf_mem_skb_inc() - increment total skb allocation size
+ * @size: size to be added
+ *
+ * Return: none
+ */
+void qdf_mem_skb_inc(qdf_size_t size);
+
+/**
+ * qdf_mem_skb_dec() - decrement total skb allocation size
+ * @size: size to be decremented
+ *
+ * Return: none
+ */
+void qdf_mem_skb_dec(qdf_size_t size);
#endif /* __QDF_MEMORY_H */
diff --git a/qdf/linux/src/qdf_mem.c b/qdf/linux/src/qdf_mem.c
index 4efa296811cf..a3c95717508f 100644
--- a/qdf/linux/src/qdf_mem.c
+++ b/qdf/linux/src/qdf_mem.c
@@ -110,10 +110,12 @@ static struct dentry *qdf_mem_debugfs_root;
* struct __qdf_mem_stat - qdf memory statistics
* @kmalloc: total kmalloc allocations
* @dma: total dma allocations
+ * @skb: total skb allocations
*/
static struct __qdf_mem_stat {
qdf_atomic_t kmalloc;
qdf_atomic_t dma;
+ qdf_atomic_t skb;
} qdf_mem_stat;
static inline void qdf_mem_kmalloc_inc(qdf_size_t size)
@@ -126,6 +128,11 @@ static inline void qdf_mem_dma_inc(qdf_size_t size)
qdf_atomic_add(size, &qdf_mem_stat.dma);
}
+void qdf_mem_skb_inc(qdf_size_t size)
+{
+ qdf_atomic_add(size, &qdf_mem_stat.skb);
+}
+
static inline void qdf_mem_kmalloc_dec(qdf_size_t size)
{
qdf_atomic_sub(size, &qdf_mem_stat.kmalloc);
@@ -136,6 +143,11 @@ static inline void qdf_mem_dma_dec(qdf_size_t size)
qdf_atomic_sub(size, &qdf_mem_stat.dma);
}
+void qdf_mem_skb_dec(qdf_size_t size)
+{
+ qdf_atomic_sub(size, &qdf_mem_stat.skb);
+}
+
#ifdef MEMORY_DEBUG
/**
* struct __qdf_mem_info - memory statistics
@@ -496,6 +508,11 @@ static QDF_STATUS qdf_mem_debugfs_init(void)
qdf_mem_debugfs_root,
&qdf_mem_stat.dma);
+ debugfs_create_atomic_t("skb",
+ S_IRUSR,
+ qdf_mem_debugfs_root,
+ &qdf_mem_stat.skb);
+
return QDF_STATUS_SUCCESS;
}
diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c
index c0ee590d364a..e5a7285a173b 100644
--- a/qdf/linux/src/qdf_nbuf.c
+++ b/qdf/linux/src/qdf_nbuf.c
@@ -1548,6 +1548,7 @@ void qdf_net_buf_debug_add_node(qdf_nbuf_t net_buf, size_t size,
p_node->file_name = file_name;
p_node->line_num = line_num;
p_node->size = size;
+ qdf_mem_skb_inc(size);
p_node->p_next = gp_qdf_net_buf_track_tbl[i];
gp_qdf_net_buf_track_tbl[i] = p_node;
} else
@@ -1610,6 +1611,7 @@ done:
net_buf);
QDF_ASSERT(0);
} else {
+ qdf_mem_skb_dec(p_node->size);
qdf_nbuf_track_free(p_node);
}
}