mbuf: use 2 bytes for port and nb segments
Change the size of m->port and m->nb_segs to 16 bits. It is now possible to reference a port identifier larger than 256 and have a mbuf chain larger than 256 segments. Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
This commit is contained in:
parent
dc448dc460
commit
97cb466d65
@ -583,7 +583,7 @@ pkt_copy_split(const struct rte_mbuf *pkt)
|
||||
rc = mbuf_copy_split(pkt, md, seglen, nb_seg);
|
||||
if (rc < 0)
|
||||
RTE_LOG(ERR, USER1,
|
||||
"mbuf_copy_split for %p(len=%u, nb_seg=%hhu) "
|
||||
"mbuf_copy_split for %p(len=%u, nb_seg=%u) "
|
||||
"into %u segments failed with error code: %d\n",
|
||||
pkt, pkt->pkt_len, pkt->nb_segs, nb_seg, rc);
|
||||
|
||||
@ -801,7 +801,7 @@ pkt_burst_checksum_forward(struct fwd_stream *fs)
|
||||
char buf[256];
|
||||
|
||||
printf("-----------------\n");
|
||||
printf("port=%u, mbuf=%p, pkt_len=%u, nb_segs=%hhu:\n",
|
||||
printf("port=%u, mbuf=%p, pkt_len=%u, nb_segs=%u:\n",
|
||||
fs->rx_port, m, m->pkt_len, m->nb_segs);
|
||||
/* dump rx parsed packet info */
|
||||
rte_get_rx_ol_flag_list(rx_ol_flags, buf, sizeof(buf));
|
||||
|
@ -118,8 +118,8 @@ struct rte_kni_mbuf {
|
||||
uint64_t buf_physaddr;
|
||||
uint16_t data_off; /**< Start address of data in segment buffer. */
|
||||
char pad1[2];
|
||||
uint8_t nb_segs; /**< Number of segments. */
|
||||
char pad4[3];
|
||||
uint16_t nb_segs; /**< Number of segments. */
|
||||
char pad4[2];
|
||||
uint64_t ol_flags; /**< Offload features. */
|
||||
char pad2[4];
|
||||
uint32_t pkt_len; /**< Total pkt len: sum of all segment data_len. */
|
||||
|
@ -400,12 +400,13 @@ struct rte_mbuf {
|
||||
void *buf_addr; /**< Virtual address of segment buffer. */
|
||||
phys_addr_t buf_physaddr; /**< Physical address of segment buffer. */
|
||||
|
||||
/* next 6 bytes are initialised on RX descriptor rearm */
|
||||
/* next 8 bytes are initialised on RX descriptor rearm */
|
||||
MARKER64 rearm_data;
|
||||
uint16_t data_off;
|
||||
|
||||
/**
|
||||
* 16-bit Reference counter.
|
||||
* Reference counter. Its size should at least equal to the size
|
||||
* of port field (16 bits), to support zero-copy broadcast.
|
||||
* It should only be accessed using the following functions:
|
||||
* rte_mbuf_refcnt_update(), rte_mbuf_refcnt_read(), and
|
||||
* rte_mbuf_refcnt_set(). The functionality of these functions (atomic,
|
||||
@ -417,9 +418,10 @@ struct rte_mbuf {
|
||||
rte_atomic16_t refcnt_atomic; /**< Atomically accessed refcnt */
|
||||
uint16_t refcnt; /**< Non-atomically accessed refcnt */
|
||||
};
|
||||
uint8_t nb_segs; /**< Number of segments. */
|
||||
uint8_t port; /**< Input port. */
|
||||
uint16_t pad; /**< 2B pad for naturally aligned ol_flags */
|
||||
uint16_t nb_segs; /**< Number of segments. */
|
||||
|
||||
/** Input port (16 bits to support more than 256 virtual ports). */
|
||||
uint16_t port;
|
||||
|
||||
uint64_t ol_flags; /**< Offload features. */
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user