qcacmn: Add API qdf_nbuf_reset to reset netbuf
This API makes the reuse of sk_buff possible, by resetting it with the reserve and align arguments passed by the caller. This brings back the skb to the original state as returned by qdf_nbuf_alloc without allocating the skb again. Change-Id: Idefcbd4be9fae5d140805d55207dec01bdc90237 CRs-Fixed: 2301899
这个提交包含在:
@@ -1569,6 +1569,19 @@ static inline void qdf_nbuf_reserve(qdf_nbuf_t buf, qdf_size_t size)
|
||||
__qdf_nbuf_reserve(buf, size);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_nbuf_reset() - reset the buffer data and pointer
|
||||
* @buf: Network buf instance
|
||||
* @reserve: reserve
|
||||
* @align: align
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void qdf_nbuf_reset(qdf_nbuf_t buf, int reserve, int align)
|
||||
{
|
||||
__qdf_nbuf_reset(buf, reserve, align);
|
||||
}
|
||||
|
||||
/**
|
||||
* qdf_nbuf_peek_header() - return the data pointer & length of the header
|
||||
* @buf: Network nbuf
|
||||
|
@@ -897,6 +897,45 @@ static inline struct sk_buff *__qdf_nbuf_copy(struct sk_buff *skb)
|
||||
|
||||
#define __qdf_nbuf_reserve skb_reserve
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_reset() - reset the buffer data and pointer
|
||||
* @buf: Network buf instance
|
||||
* @reserve: reserve
|
||||
* @align: align
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static inline void
|
||||
__qdf_nbuf_reset(struct sk_buff *skb, int reserve, int align)
|
||||
{
|
||||
int offset;
|
||||
|
||||
skb_push(skb, skb_headroom(skb));
|
||||
skb_put(skb, skb_tailroom(skb));
|
||||
memset(skb->data, 0x0, skb->len);
|
||||
skb_trim(skb, 0);
|
||||
skb_reserve(skb, NET_SKB_PAD);
|
||||
memset(skb->cb, 0x0, sizeof(skb->cb));
|
||||
|
||||
/*
|
||||
* The default is for netbuf fragments to be interpreted
|
||||
* as wordstreams rather than bytestreams.
|
||||
*/
|
||||
QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_EFRAG(skb) = 1;
|
||||
QDF_NBUF_CB_TX_EXTRA_FRAG_WORDSTR_NBUF(skb) = 1;
|
||||
|
||||
/*
|
||||
* Align & make sure that the tail & data are adjusted properly
|
||||
*/
|
||||
|
||||
if (align) {
|
||||
offset = ((unsigned long)skb->data) % align;
|
||||
if (offset)
|
||||
skb_reserve(skb, align - offset);
|
||||
}
|
||||
|
||||
skb_reserve(skb, reserve);
|
||||
}
|
||||
|
||||
/**
|
||||
* __qdf_nbuf_head() - return the pointer the skb's head pointer
|
||||
|
在新工单中引用
屏蔽一个用户