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.m...@6wind.com>
---
 app/test-pmd/csumonly.c                                      |  4 ++--
 .../linuxapp/eal/include/exec-env/rte_kni_common.h           |  4 ++--
 lib/librte_mbuf/rte_mbuf.h                                   | 12 +++++++-----
 3 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/app/test-pmd/csumonly.c b/app/test-pmd/csumonly.c
index 88cc84205..5eaff9b2f 100644
--- a/app/test-pmd/csumonly.c
+++ b/app/test-pmd/csumonly.c
@@ -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));
diff --git a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h 
b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
index f24f79fa2..2ac879fdd 100644
--- a/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
+++ b/lib/librte_eal/linuxapp/eal/include/exec-env/rte_kni_common.h
@@ -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. */
diff --git a/lib/librte_mbuf/rte_mbuf.h b/lib/librte_mbuf/rte_mbuf.h
index 4ef27f92a..323a1ac16 100644
--- a/lib/librte_mbuf/rte_mbuf.h
+++ b/lib/librte_mbuf/rte_mbuf.h
@@ -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. */
 
-- 
2.11.0

Reply via email to