qcacmn: Add nbuf map/unmap history tracking

An nbuf free history circular buffer already exists for tracking recent
nbuf frees in the system. This is very useful for debugging tricky nbuf
related failures in the driver. In addition to tracking frees, track
alloc, map, and unmap nbuf events as well.

Change-Id: I253d454d689deb8328b3636e92063e9d33ea1a52
CRs-Fixed: 2170365
This commit is contained in:
Dustin Brown
2018-01-11 14:46:58 -08:00
committed by snandini
vanhempi ed0aba69a9
commit 976a7f6f6e
2 muutettua tiedostoa jossa 90 lisäystä ja 102 poistoa

Näytä tiedosto

@@ -1026,47 +1026,20 @@ void qdf_net_buf_debug_delete_node(qdf_nbuf_t net_buf);
void qdf_net_buf_debug_acquire_skb(qdf_nbuf_t net_buf,
uint8_t *file_name, uint32_t line_num);
void qdf_net_buf_debug_release_skb(qdf_nbuf_t net_buf);
void qdf_net_buf_free_debug_add(qdf_nbuf_t net_buf, uint8_t *file_name,
uint32_t line_num);
/* nbuf allocation rouines */
#define qdf_nbuf_alloc(d, s, r, a, p) \
#define qdf_nbuf_alloc(d, s, r, a, p) \
qdf_nbuf_alloc_debug(d, s, r, a, p, __FILE__, __LINE__)
static inline qdf_nbuf_t
qdf_nbuf_alloc_debug(qdf_device_t osdev, qdf_size_t size, int reserve,
int align, int prio, uint8_t *file_name,
uint32_t line_num)
{
qdf_nbuf_t net_buf;
net_buf = __qdf_nbuf_alloc(osdev, size, reserve, align, prio);
qdf_nbuf_t qdf_nbuf_alloc_debug(qdf_device_t osdev, qdf_size_t size,
int reserve, int align, int prio,
uint8_t *file, uint32_t line);
/* Store SKB in internal QDF tracking table */
if (qdf_likely(net_buf))
qdf_net_buf_debug_add_node(net_buf, size, file_name, line_num);
return net_buf;
}
#define qdf_nbuf_free(d) \
#define qdf_nbuf_free(d) \
qdf_nbuf_free_debug(d, __FILE__, __LINE__)
static inline void qdf_nbuf_free_debug(qdf_nbuf_t net_buf,
uint8_t *file_name, uint32_t line_num)
{
if (qdf_nbuf_is_tso(net_buf) &&
qdf_nbuf_get_users(net_buf) > 1)
goto free_buf;
/* Remove SKB from internal QDF tracking table */
if (qdf_likely(net_buf)) {
qdf_net_buf_free_debug_add(net_buf, file_name, line_num);
qdf_net_buf_debug_delete_node(net_buf);
}
free_buf:
__qdf_nbuf_free(net_buf);
}
void qdf_nbuf_free_debug(qdf_nbuf_t nbuf, uint8_t *file, uint32_t line);
#define qdf_nbuf_clone(buf) \
qdf_nbuf_clone_debug(buf, __FILE__, __LINE__)