mbuf: add userdata pointer field
While some applications may store metadata about packets in the packet mbuf headroom, this is not a workable solution for packet metadata which is either: * larger than the headroom (or headroom is needed for adding pkt headers) * needs to be shared or copied among packets To support these use cases in applications, we reserve a general "userdata" pointer field inside the second cache-line of the mbuf. This is better than having the application store the pointer to the external metadata in the packet headroom, as it saves an additional cache-line from being used. Apart from storing metadata, this field also provides a general 8-byte scratch space inside the mbuf for any other application uses that are applicable. Signed-off-by: Bruce Richardson <bruce.richardson@intel.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
parent
7f78e67701
commit
4cd917b308
@ -116,8 +116,10 @@ struct rte_kni_mbuf {
|
||||
char pad2[2];
|
||||
uint16_t data_len; /**< Amount of data in segment buffer. */
|
||||
uint32_t pkt_len; /**< Total pkt len: sum of all segment data_len. */
|
||||
char pad3[8];
|
||||
void *pool __attribute__((__aligned__(64)));
|
||||
|
||||
/* fields on second cache line */
|
||||
char pad3[8] __attribute__((__aligned__(64)));
|
||||
void *pool;
|
||||
void *next;
|
||||
};
|
||||
|
||||
|
@ -172,6 +172,12 @@ struct rte_mbuf {
|
||||
|
||||
/* second cache line - fields only used in slow path or on TX */
|
||||
MARKER cacheline1 __rte_cache_aligned;
|
||||
|
||||
union {
|
||||
void *userdata; /**< Can be used for external metadata */
|
||||
uint64_t udata64; /**< Allow 8-byte userdata on 32-bit */
|
||||
};
|
||||
|
||||
struct rte_mempool *pool; /**< Pool from which mbuf was allocated. */
|
||||
struct rte_mbuf *next; /**< Next segment of scattered packet. */
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user