qcacmn: Add API to remove frag from skb
Add API to remove frag from skb CRs-Fixed: 3172668 Change-Id: I0b392366760036c6fda545f558f72a64138d2b11
This commit is contained in:

committed by
Madan Koyyalamudi

parent
c180aaa364
commit
6b69543b79
@@ -5504,6 +5504,28 @@ QDF_STATUS __qdf_nbuf_move_frag_page_offset(__qdf_nbuf_t nbuf, uint8_t idx,
|
||||
|
||||
qdf_export_symbol(__qdf_nbuf_move_frag_page_offset);
|
||||
|
||||
void __qdf_nbuf_remove_frag(__qdf_nbuf_t nbuf,
|
||||
uint16_t idx,
|
||||
uint16_t truesize)
|
||||
{
|
||||
struct page *page;
|
||||
uint16_t frag_len;
|
||||
|
||||
page = skb_frag_page(&skb_shinfo(nbuf)->frags[idx]);
|
||||
|
||||
if (qdf_unlikely(!page))
|
||||
return;
|
||||
|
||||
frag_len = qdf_nbuf_get_frag_size_by_idx(nbuf, idx);
|
||||
put_page(page);
|
||||
nbuf->len -= frag_len;
|
||||
nbuf->data_len -= frag_len;
|
||||
nbuf->truesize -= truesize;
|
||||
skb_shinfo(nbuf)->nr_frags--;
|
||||
}
|
||||
|
||||
qdf_export_symbol(__qdf_nbuf_remove_frag);
|
||||
|
||||
void __qdf_nbuf_add_rx_frag(__qdf_frag_t buf, __qdf_nbuf_t nbuf,
|
||||
int offset, int frag_len,
|
||||
unsigned int truesize, bool take_frag_ref)
|
||||
@@ -5730,6 +5752,51 @@ void qdf_net_buf_debug_release_frag(qdf_nbuf_t buf, const char *func,
|
||||
}
|
||||
|
||||
qdf_export_symbol(qdf_net_buf_debug_release_frag);
|
||||
|
||||
/**
|
||||
* qdf_nbuf_remove_frag_debug - Remove frag from nbuf
|
||||
* @nbuf: nbuf where frag will be removed
|
||||
* @idx: frag index
|
||||
* @truesize: truesize of frag
|
||||
* @func: Caller function name
|
||||
* @line: Caller function line no.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*
|
||||
*/
|
||||
QDF_STATUS
|
||||
qdf_nbuf_remove_frag_debug(qdf_nbuf_t nbuf,
|
||||
uint16_t idx,
|
||||
uint16_t truesize,
|
||||
const char *func,
|
||||
uint32_t line)
|
||||
{
|
||||
uint16_t num_frags;
|
||||
qdf_frag_t frag;
|
||||
|
||||
if (qdf_unlikely(!nbuf))
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
num_frags = qdf_nbuf_get_nr_frags(nbuf);
|
||||
if (idx >= num_frags)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
if (qdf_likely(is_initial_mem_debug_disabled)) {
|
||||
__qdf_nbuf_remove_frag(nbuf, idx, truesize);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
frag = qdf_nbuf_get_frag_addr(nbuf, idx);
|
||||
if (qdf_likely(frag))
|
||||
qdf_frag_debug_refcount_dec(frag, func, line);
|
||||
|
||||
__qdf_nbuf_remove_frag(nbuf, idx, truesize);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
qdf_export_symbol(qdf_nbuf_remove_frag_debug);
|
||||
|
||||
#endif /* NBUF_FRAG_MEMORY_DEBUG */
|
||||
|
||||
/**
|
||||
|
Reference in New Issue
Block a user