qcacmn: Create a list of skbs to be freed at once
Create a list of skbs to be freed at once in dp tx completion path Change-Id: I42129b4306206f7224ceabc87d07e2a87b8fcab6 CRs-Fixed: 3274945
This commit is contained in:

committato da
Madan Koyyalamudi

parent
801226f363
commit
5d0b7ea33f
@@ -2595,6 +2595,12 @@ void __qdf_nbuf_queue_head_purge(struct sk_buff_head *skb_queue_head)
|
||||
return skb_queue_purge(skb_queue_head);
|
||||
}
|
||||
|
||||
static inline
|
||||
int __qdf_nbuf_queue_empty(__qdf_nbuf_queue_head_t *nbuf_queue_head)
|
||||
{
|
||||
return skb_queue_empty(nbuf_queue_head);
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_queue_head_lock() - Acquire the skb list lock
|
||||
* @head: skb list for which lock is to be acquired
|
||||
@@ -2905,6 +2911,33 @@ static inline void __qdf_nbuf_kfree(struct sk_buff *skb)
|
||||
kfree_skb(skb);
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_dev_kfree_list() - Free nbuf list using dev based os call
|
||||
* @skb_queue_head: Pointer to nbuf queue head
|
||||
*
|
||||
* This function is called to free the nbuf list on failure cases
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void
|
||||
__qdf_nbuf_dev_kfree_list(__qdf_nbuf_queue_head_t *nbuf_queue_head);
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_dev_queue_head() - queue a buffer using dev at the list head
|
||||
* @skb_queue_head: Pointer to skb list head
|
||||
* @buff: Pointer to nbuf
|
||||
*
|
||||
* This function is called to queue buffer at the skb list head
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static inline void
|
||||
__qdf_nbuf_dev_queue_head(__qdf_nbuf_queue_head_t *nbuf_queue_head,
|
||||
__qdf_nbuf_t buff)
|
||||
{
|
||||
__skb_queue_head(nbuf_queue_head, buff);
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_dev_kfree() - Free nbuf using dev based os call
|
||||
* @buf: Pointer to network buffer
|
||||
|
@@ -746,6 +746,21 @@ __qdf_nbuf_t __qdf_nbuf_clone(__qdf_nbuf_t skb)
|
||||
|
||||
qdf_export_symbol(__qdf_nbuf_clone);
|
||||
|
||||
#ifdef QCA_DP_TX_NBUF_LIST_FREE
|
||||
void
|
||||
__qdf_nbuf_dev_kfree_list(__qdf_nbuf_queue_head_t *nbuf_queue_head)
|
||||
{
|
||||
dev_kfree_skb_list_fast(nbuf_queue_head);
|
||||
}
|
||||
#else
|
||||
void
|
||||
__qdf_nbuf_dev_kfree_list(__qdf_nbuf_queue_head_t *nbuf_queue_head)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
qdf_export_symbol(__qdf_nbuf_dev_kfree_list);
|
||||
|
||||
#ifdef NBUF_MEMORY_DEBUG
|
||||
struct qdf_nbuf_event {
|
||||
qdf_nbuf_t nbuf;
|
||||
@@ -3892,6 +3907,23 @@ unshare_buf:
|
||||
|
||||
qdf_export_symbol(qdf_nbuf_unshare_debug);
|
||||
|
||||
void
|
||||
qdf_nbuf_dev_kfree_list_debug(__qdf_nbuf_queue_head_t *nbuf_queue_head,
|
||||
const char *func, uint32_t line)
|
||||
{
|
||||
qdf_nbuf_t buf;
|
||||
|
||||
if (qdf_nbuf_queue_empty(nbuf_queue_head))
|
||||
return;
|
||||
|
||||
if (is_initial_mem_debug_disabled)
|
||||
return __qdf_nbuf_dev_kfree_list(nbuf_queue_head);
|
||||
|
||||
while ((buf = qdf_nbuf_queue_head_dequeue(nbuf_queue_head)) != NULL)
|
||||
qdf_nbuf_free_debug(buf, func, line);
|
||||
}
|
||||
|
||||
qdf_export_symbol(qdf_nbuf_dev_kfree_list_debug);
|
||||
#endif /* NBUF_MEMORY_DEBUG */
|
||||
|
||||
#if defined(FEATURE_TSO)
|
||||
|
Fai riferimento in un nuovo problema
Block a user