diff options
| author | Rajeev Kumar <rajekuma@codeaurora.org> | 2017-06-23 11:02:28 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2017-07-04 23:26:26 -0700 |
| commit | 90cd8b4e9e48c6db7ff1699b5bcfd7070bfe5544 (patch) | |
| tree | 759a991b6786be4181a22b1184c82b910cc66838 | |
| parent | 7cd925f91c992115f432fba44b62004b2f1d76d4 (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.h | 15 | ||||
| -rw-r--r-- | qdf/linux/src/qdf_mem.c | 17 | ||||
| -rw-r--r-- | qdf/linux/src/qdf_nbuf.c | 2 |
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); } } |
