mbuf: add function to reset headroom
Some application use rte_mbuf_raw_alloc() function to improve performance by not resetting mbuf's fields to their default state. This can be however problematic for mbuf consumers that need some headroom, meaning that data_off field gets decremented after allocation. When the mbuf is re-used afterwards, there might not be enough room for the consumer to prepend anything, if the data_off field is not reset to its default value. This patch adds a new rte_pktmbuf_reset_headroom() function that applications can call to reset the data_off field. This patch also replaces current data_off affectations in the mbuf lib with a call to this function. Signed-off-by: Maxime Coquelin <maxime.coquelin@redhat.com> Acked-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
parent
4e8739e9bb
commit
febf2bb46d
@ -1386,6 +1386,19 @@ rte_pktmbuf_priv_size(struct rte_mempool *mp)
|
||||
return mbp_priv->mbuf_priv_size;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the data_off field of a packet mbuf to its default value.
|
||||
*
|
||||
* The given mbuf must have only one segment, which should be empty.
|
||||
*
|
||||
* @param m
|
||||
* The packet mbuf's data_off field has to be reset.
|
||||
*/
|
||||
static inline void rte_pktmbuf_reset_headroom(struct rte_mbuf *m)
|
||||
{
|
||||
m->data_off = RTE_MIN(RTE_PKTMBUF_HEADROOM, (uint16_t)m->buf_len);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the fields of a packet mbuf to their default values.
|
||||
*
|
||||
@ -1406,8 +1419,7 @@ static inline void rte_pktmbuf_reset(struct rte_mbuf *m)
|
||||
|
||||
m->ol_flags = 0;
|
||||
m->packet_type = 0;
|
||||
m->data_off = (RTE_PKTMBUF_HEADROOM <= m->buf_len) ?
|
||||
RTE_PKTMBUF_HEADROOM : m->buf_len;
|
||||
rte_pktmbuf_reset_headroom(m);
|
||||
|
||||
m->data_len = 0;
|
||||
__rte_mbuf_sanity_check(m, 1);
|
||||
@ -1571,7 +1583,7 @@ static inline void rte_pktmbuf_detach(struct rte_mbuf *m)
|
||||
m->buf_addr = (char *)m + mbuf_size;
|
||||
m->buf_physaddr = rte_mempool_virt2phy(mp, m) + mbuf_size;
|
||||
m->buf_len = (uint16_t)buf_len;
|
||||
m->data_off = RTE_MIN(RTE_PKTMBUF_HEADROOM, (uint16_t)m->buf_len);
|
||||
rte_pktmbuf_reset_headroom(m);
|
||||
m->data_len = 0;
|
||||
m->ol_flags = 0;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user