diff options
| author | Rajeev Kumar <rajekuma@codeaurora.org> | 2017-06-13 16:42:30 -0700 |
|---|---|---|
| committer | snandini <snandini@codeaurora.org> | 2017-06-19 03:52:46 -0700 |
| commit | 1a76aa975fc5fbc2246b73d0aff84feae9b57d7c (patch) | |
| tree | dc18bb942bf49a5c0b0c29614585ea4f522bbd2a | |
| parent | ca8f798f771e5e883b4b3083dd5fb680f3be7142 (diff) | |
qcacmn: Trigger panic on SKB memory leak in debug builds
To catch SKB memory leaks trigger panic on SKB leak in SLUB debug builds
if CONFIG_HALT_KMEMLEAK is enabled.
Change-Id: I817af56b4de19beae835f6d7791be51d4984ed22
CRs-Fixed: 2060796
| -rw-r--r-- | qdf/linux/src/qdf_nbuf.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/qdf/linux/src/qdf_nbuf.c b/qdf/linux/src/qdf_nbuf.c index b412d78a4a67..eceee0be12bd 100644 --- a/qdf/linux/src/qdf_nbuf.c +++ b/qdf/linux/src/qdf_nbuf.c @@ -1427,6 +1427,18 @@ void qdf_net_buf_debug_init(void) } qdf_export_symbol(qdf_net_buf_debug_init); +#ifdef CONFIG_HALT_KMEMLEAK +static void qdf_net_buf_handle_skb_leak(uint32_t leaked_skb_count) +{ + if (leaked_skb_count) { + qdf_print("%d SKB leaked", leaked_skb_count); + QDF_BUG(0); + } +} +#else +static void qdf_net_buf_handle_skb_leak(uint32_t leaked_skb_count) { } +#endif + /** * qdf_net_buf_debug_init() - exit network buffer debug functionality * @@ -1439,6 +1451,7 @@ qdf_export_symbol(qdf_net_buf_debug_init); void qdf_net_buf_debug_exit(void) { uint32_t i; + uint32_t count = 0; unsigned long irq_flag; QDF_NBUF_TRACK *p_node; QDF_NBUF_TRACK *p_prev; @@ -1449,6 +1462,7 @@ void qdf_net_buf_debug_exit(void) while (p_node) { p_prev = p_node; p_node = p_node->p_next; + count++; qdf_print("SKB buf memory Leak@ File %s, @Line %d, size %zu\n", p_prev->file_name, p_prev->line_num, p_prev->size); @@ -1458,6 +1472,8 @@ void qdf_net_buf_debug_exit(void) } qdf_nbuf_track_memory_manager_destroy(); + + qdf_net_buf_handle_skb_leak(count); } qdf_export_symbol(qdf_net_buf_debug_exit); |
