mbuf: remove rte_ctrlmbuf
authorOlivier Matz <olivier.matz@6wind.com>
Thu, 28 Aug 2014 15:42:36 +0000 (16:42 +0100)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Wed, 17 Sep 2014 09:27:50 +0000 (11:27 +0200)
The initial role of rte_ctrlmbuf is to carry generic messages (data
pointer + data length) but it's not used by the DPDK or it applications.
Keeping it implies:
  - loosing 1 byte in the rte_mbuf structure
  - having some dead code rte_mbuf.[ch]

This patch removes this feature. Thanks to it, it is now possible to
simplify the rte_mbuf structure by merging the rte_pktmbuf structure
in it. This is done in next commit.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
* Updated patch to HEAD.
* Modified patch to retain the old function names for ctrl mbufs as
  macros. This helps with app compatibility, and allows the concept
  of a control mbuf to be reintroduced via a single-bit flag in
  a future change.
* Updated the packet framework ip_pipeline example application to
  work following this change.

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
22 files changed:
app/test-pmd/cmdline.c
app/test-pmd/flowgen.c
app/test-pmd/testpmd.c
app/test-pmd/txonly.c
app/test/commands.c
app/test/test_mbuf.c
examples/ip_pipeline/cmdline.c
examples/ip_pipeline/init.c
examples/ip_pipeline/pipeline_firewall.c
examples/ip_pipeline/pipeline_flow_classification.c
examples/ip_pipeline/pipeline_routing.c
examples/ip_pipeline/pipeline_rx.c
examples/ipv4_multicast/main.c
lib/librte_mbuf/rte_mbuf.c
lib/librte_mbuf/rte_mbuf.h
lib/librte_pmd_e1000/em_rxtx.c
lib/librte_pmd_e1000/igb_rxtx.c
lib/librte_pmd_i40e/i40e_rxtx.c
lib/librte_pmd_ixgbe/ixgbe_rxtx.c
lib/librte_pmd_virtio/virtio_rxtx.c
lib/librte_pmd_vmxnet3/vmxnet3_rxtx.c
lib/librte_pmd_xenvirt/rte_eth_xenvirt.c

index b04a4e8..6de38e6 100644 (file)
@@ -6476,7 +6476,6 @@ dump_struct_sizes(void)
 #define DUMP_SIZE(t) printf("sizeof(" #t ") = %u\n", (unsigned)sizeof(t));
        DUMP_SIZE(struct rte_mbuf);
        DUMP_SIZE(struct rte_pktmbuf);
-       DUMP_SIZE(struct rte_ctrlmbuf);
        DUMP_SIZE(struct rte_mempool);
        DUMP_SIZE(struct rte_ring);
 #undef DUMP_SIZE
index 04911ff..a8f2a65 100644 (file)
@@ -96,7 +96,7 @@ tx_mbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
        return (m);
 }
 
index 8f5f9ad..2d74c5c 100644 (file)
@@ -398,13 +398,11 @@ testpmd_mbuf_ctor(struct rte_mempool *mp,
        mb_ctor_arg = (struct mbuf_ctor_arg *) opaque_arg;
        mb = (struct rte_mbuf *) raw_mbuf;
 
-       mb->type         = RTE_MBUF_PKT;
        mb->pool         = mp;
        mb->buf_addr     = (void *) ((char *)mb + mb_ctor_arg->seg_buf_offset);
        mb->buf_physaddr = (uint64_t) (rte_mempool_virt2phy(mp, mb) +
                        mb_ctor_arg->seg_buf_offset);
        mb->buf_len      = mb_ctor_arg->seg_buf_size;
-       mb->type         = RTE_MBUF_PKT;
        mb->ol_flags     = 0;
        mb->pkt.data     = (char *) mb->buf_addr + RTE_PKTMBUF_HEADROOM;
        mb->pkt.nb_segs  = 1;
index ef93741..d634096 100644 (file)
@@ -93,7 +93,7 @@ tx_mbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
        return (m);
 }
 
index b7c6ee0..9ea3c62 100644 (file)
@@ -137,7 +137,6 @@ dump_struct_sizes(void)
 #define DUMP_SIZE(t) printf("sizeof(" #t ") = %u\n", (unsigned)sizeof(t));
        DUMP_SIZE(struct rte_mbuf);
        DUMP_SIZE(struct rte_pktmbuf);
-       DUMP_SIZE(struct rte_ctrlmbuf);
        DUMP_SIZE(struct rte_mempool);
        DUMP_SIZE(struct rte_ring);
 #undef DUMP_SIZE
index c75f442..280b1ab 100644 (file)
@@ -80,7 +80,6 @@
 #define MAKE_STRING(x)          # x
 
 static struct rte_mempool *pktmbuf_pool = NULL;
-static struct rte_mempool *ctrlmbuf_pool = NULL;
 
 #if defined RTE_MBUF_REFCNT  && defined RTE_MBUF_REFCNT_ATOMIC
 
@@ -272,8 +271,8 @@ test_one_pktmbuf(void)
                GOTO_FAIL("Buffer should be continuous");
        memset(hdr, 0x55, MBUF_TEST_HDR2_LEN);
 
-       rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
-       rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 0);
+       rte_mbuf_sanity_check(m, 1);
+       rte_mbuf_sanity_check(m, 0);
        rte_pktmbuf_dump(stdout, m, 0);
 
        /* this prepend should fail */
@@ -320,48 +319,6 @@ fail:
        return -1;
 }
 
-/*
- * test control mbuf
- */
-static int
-test_one_ctrlmbuf(void)
-{
-       struct rte_mbuf *m = NULL;
-       char message[] = "This is a message carried by a ctrlmbuf";
-
-       printf("Test ctrlmbuf API\n");
-
-       /* alloc a mbuf */
-
-       m = rte_ctrlmbuf_alloc(ctrlmbuf_pool);
-       if (m == NULL)
-               GOTO_FAIL("Cannot allocate mbuf");
-       if (rte_ctrlmbuf_len(m) != 0)
-               GOTO_FAIL("Bad length");
-
-       /* set data */
-       rte_ctrlmbuf_data(m) = &message;
-       rte_ctrlmbuf_len(m) = sizeof(message);
-
-       /* read data */
-       if (rte_ctrlmbuf_data(m) != message)
-               GOTO_FAIL("Invalid data pointer");
-       if (rte_ctrlmbuf_len(m) != sizeof(message))
-               GOTO_FAIL("Invalid len");
-
-       rte_mbuf_sanity_check(m, RTE_MBUF_CTRL, 0);
-
-       /* free mbuf */
-       rte_ctrlmbuf_free(m);
-       m = NULL;
-       return 0;
-
-fail:
-       if (m)
-               rte_ctrlmbuf_free(m);
-       return -1;
-}
-
 static int
 testclone_testupdate_testdetach(void)
 {
@@ -744,7 +701,7 @@ verify_mbuf_check_panics(struct rte_mbuf *buf)
        pid = fork();
 
        if (pid == 0) {
-               rte_mbuf_sanity_check(buf, RTE_MBUF_PKT, 1); /* should panic */
+               rte_mbuf_sanity_check(buf, 1); /* should panic */
                exit(0);  /* return normally if it doesn't panic */
        } else if (pid < 0){
                printf("Fork Failed\n");
@@ -780,13 +737,6 @@ test_failing_mbuf_sanity_check(void)
                return -1;
        }
 
-       badbuf = *buf;
-       badbuf.type = (uint8_t)-1;
-       if (verify_mbuf_check_panics(&badbuf)) {
-               printf("Error with bad-type mbuf test\n");
-               return -1;
-       }
-
        badbuf = *buf;
        badbuf.pool = NULL;
        if (verify_mbuf_check_panics(&badbuf)) {
@@ -889,22 +839,6 @@ test_mbuf(void)
                return -1;
        }
 
-       /* create ctrlmbuf pool if it does not exist */
-       if (ctrlmbuf_pool == NULL) {
-               ctrlmbuf_pool =
-                       rte_mempool_create("test_ctrlmbuf_pool", NB_MBUF,
-                                          sizeof(struct rte_mbuf), 32, 0,
-                                          NULL, NULL,
-                                          rte_ctrlmbuf_init, NULL,
-                                          SOCKET_ID_ANY, 0);
-       }
-
-       /* test control mbuf */
-       if (test_one_ctrlmbuf() < 0) {
-               printf("test_one_ctrlmbuf() failed\n");
-               return -1;
-       }
-
        /* test free pktmbuf segment one by one */
        if (test_pktmbuf_free_segment() < 0) {
                printf("test_pktmbuf_free_segment() failed.\n");
index e10a0cf..a56335e 100644 (file)
@@ -345,7 +345,7 @@ cmd_link_enable_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        req->type = APP_MSG_REQ_RX_PORT_ENABLE;
        req->rx_up.port = params->port;
 
@@ -358,7 +358,7 @@ cmd_link_enable_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        /* Check response */
        if (resp->result != 0)
                printf("Request LINK_UP failed (%u)\n", resp->result);
@@ -433,7 +433,7 @@ cmd_link_disable_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        req->type = APP_MSG_REQ_RX_PORT_DISABLE;
        req->rx_down.port = params->port;
 
@@ -446,7 +446,7 @@ cmd_link_disable_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -543,7 +543,7 @@ cmd_arp_add_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        req->type = APP_MSG_REQ_ARP_ADD;
        req->arp_add.out_iface = rule.arp.key.out_iface;
        req->arp_add.nh_ip = rule.arp.key.nh_ip;
@@ -558,7 +558,7 @@ cmd_arp_add_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -672,7 +672,7 @@ cmd_arp_del_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        req->type = APP_MSG_REQ_ARP_DEL;
        req->arp_del.out_iface = rule.arp.key.out_iface;
        req->arp_del.nh_ip = rule.arp.key.nh_ip;
@@ -686,7 +686,7 @@ cmd_arp_del_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -834,7 +834,7 @@ cmd_route_add_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        req->type = APP_MSG_REQ_RT_ADD;
        req->routing_add.ip = rule.routing.key.ip;
        req->routing_add.depth = rule.routing.key.depth;
@@ -850,7 +850,7 @@ cmd_route_add_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -972,7 +972,7 @@ cmd_route_del_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        req->type = APP_MSG_REQ_RT_DEL;
        req->routing_del.ip = rule.routing.key.ip;
        req->routing_del.depth = rule.routing.key.depth;
@@ -986,7 +986,7 @@ cmd_route_del_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -1149,7 +1149,7 @@ cmd_firewall_add_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) msg->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data(msg);
        req->type = APP_MSG_REQ_FW_ADD;
        req->firewall_add.add_params.priority = rule.firewall.priority;
        req->firewall_add.add_params.field_value[1].value.u32 =
@@ -1183,7 +1183,7 @@ cmd_firewall_add_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, (void **) &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) msg->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data(msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -1347,7 +1347,7 @@ cmd_firewall_del_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) msg->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data(msg);
        memset(&req->firewall_del, 0, sizeof(req->firewall_del));
        req->type = APP_MSG_REQ_FW_DEL;
        req->firewall_del.delete_params.field_value[1].value.u32 =
@@ -1380,7 +1380,7 @@ cmd_firewall_del_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, (void **) &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) msg->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data(msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -1525,7 +1525,7 @@ cmd_flow_add_all_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        memset(req, 0, sizeof(struct app_msg_req));
 
        req->type = APP_MSG_REQ_FC_ADD_ALL;
@@ -1539,7 +1539,7 @@ cmd_flow_add_all_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -1641,7 +1641,7 @@ cmd_flow_add_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        memset(req, 0, sizeof(struct app_msg_req));
 
        req->type = APP_MSG_REQ_FC_ADD;
@@ -1663,7 +1663,7 @@ cmd_flow_add_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
@@ -1790,7 +1790,7 @@ cmd_flow_del_parsed(
                rte_panic("Unable to allocate new message\n");
 
        /* Fill request message */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        memset(req, 0, sizeof(struct app_msg_req));
 
        req->type = APP_MSG_REQ_FC_DEL;
@@ -1811,7 +1811,7 @@ cmd_flow_del_parsed(
        do {
                status = rte_ring_sc_dequeue(ring_resp, &msg);
        } while (status != 0);
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
 
        /* Check response */
        if (resp->result != 0)
index d00027f..e3ebd46 100644 (file)
@@ -561,7 +561,7 @@ app_ping(void)
                        rte_panic("Unable to allocate new message\n");
 
                req = (struct app_msg_req *)
-                       ((struct rte_mbuf *)msg)->ctrl.data;
+                               rte_ctrlmbuf_data((struct rte_mbuf *)msg);
                req->type = APP_MSG_REQ_PING;
 
                /* Send request */
index ecc15a7..b70260e 100644 (file)
@@ -264,7 +264,7 @@ app_message_handle(struct app_core_firewall_message_handle_params *params)
        table_id = params->table_id;
 
        /* Handle request */
-       req = (struct app_msg_req *) msg->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data(msg);
        switch (req->type) {
        case APP_MSG_REQ_PING:
        {
@@ -303,7 +303,7 @@ app_message_handle(struct app_core_firewall_message_handle_params *params)
        }
 
        /* Fill in response message */
-       resp = (struct app_msg_resp *) msg->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data(msg);
        resp->result = result;
 
        /* Send response */
index 68d4f93..cc0cbf1 100644 (file)
@@ -250,7 +250,7 @@ app_message_handle(struct app_core_fc_message_handle_params *params)
        table_id = params->table_id;
 
        /* Handle request */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        switch (req->type) {
        case APP_MSG_REQ_PING:
        {
@@ -296,7 +296,7 @@ app_message_handle(struct app_core_fc_message_handle_params *params)
        }
 
        /* Fill in response message */
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        resp->result = result;
 
        /* Send response */
index f19506d..b1ce624 100644 (file)
@@ -370,7 +370,7 @@ app_message_handle(struct app_core_routing_message_handle_params *params)
        arp_table_id = params->arp_table_id;
 
        /* Handle request */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        switch (req->type) {
        case APP_MSG_REQ_PING:
        {
@@ -464,7 +464,7 @@ app_message_handle(struct app_core_routing_message_handle_params *params)
        }
 
        /* Fill in response message */
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        resp->result = result;
 
        /* Send response */
index ba5fa0a..e43ebfa 100644 (file)
@@ -348,7 +348,7 @@ app_message_handle(struct app_core_rx_message_handle_params *params)
        port_in_id = params->port_in_id;
 
        /* Handle request */
-       req = (struct app_msg_req *) ((struct rte_mbuf *)msg)->ctrl.data;
+       req = (struct app_msg_req *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        switch (req->type) {
        case APP_MSG_REQ_PING:
        {
@@ -375,7 +375,7 @@ app_message_handle(struct app_core_rx_message_handle_params *params)
        }
 
        /* Fill in response message */
-       resp = (struct app_msg_resp *) ((struct rte_mbuf *)msg)->ctrl.data;
+       resp = (struct app_msg_resp *)rte_ctrlmbuf_data((struct rte_mbuf *)msg);
        resp->result = result;
 
        /* Send response */
index dfa0075..7b53296 100644 (file)
@@ -343,7 +343,7 @@ mcast_out_pkt(struct rte_mbuf *pkt, int use_clone)
 
        hdr->ol_flags = pkt->ol_flags;
 
-       __rte_mbuf_sanity_check(hdr, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(hdr, 1);
        return (hdr);
 }
 
index a4967e3..3e72a70 100644 (file)
  */
 void
 rte_ctrlmbuf_init(struct rte_mempool *mp,
-                 __attribute__((unused)) void *opaque_arg,
-                 void *_m,
-                 __attribute__((unused)) unsigned i)
+               __attribute__((unused)) void *opaque_arg,
+               void *_m,
+               __attribute__((unused)) unsigned i)
 {
-       struct rte_mbuf *m = _m;
-
-       memset(m, 0, mp->elt_size);
-
-       /* start of buffer is just after mbuf structure */
-       m->buf_addr = (char *)m + sizeof(struct rte_mbuf);
-       m->buf_physaddr = rte_mempool_virt2phy(mp, m) +
-                       sizeof(struct rte_mbuf);
-       m->buf_len = (uint16_t) (mp->elt_size - sizeof(struct rte_mbuf));
-
-       /* init some constant fields */
-       m->type = RTE_MBUF_CTRL;
-       m->ctrl.data = (char *)m->buf_addr;
-       m->pool = (struct rte_mempool *)mp;
+       rte_pktmbuf_init(mp, opaque_arg, _m, i);
 }
 
 /*
@@ -133,7 +120,6 @@ rte_pktmbuf_init(struct rte_mempool *mp,
        m->pkt.data = (char*) m->buf_addr + RTE_MIN(RTE_PKTMBUF_HEADROOM, m->buf_len);
 
        /* init some constant fields */
-       m->type = RTE_MBUF_PKT;
        m->pool = mp;
        m->pkt.nb_segs = 1;
        m->pkt.in_port = 0xff;
@@ -141,16 +127,13 @@ rte_pktmbuf_init(struct rte_mempool *mp,
 
 /* do some sanity checks on a mbuf: panic if it fails */
 void
-rte_mbuf_sanity_check(const struct rte_mbuf *m, enum rte_mbuf_type t,
-                     int is_header)
+rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header)
 {
        const struct rte_mbuf *m_seg;
        unsigned nb_segs;
 
        if (m == NULL)
                rte_panic("mbuf is NULL\n");
-       if (m->type != (uint8_t)t)
-               rte_panic("bad mbuf type\n");
 
        /* generic checks */
        if (m->pool == NULL)
@@ -166,29 +149,18 @@ rte_mbuf_sanity_check(const struct rte_mbuf *m, enum rte_mbuf_type t,
                rte_panic("bad ref cnt\n");
 #endif
 
-       /* nothing to check for ctrl messages */
-       if (m->type == RTE_MBUF_CTRL)
+       /* nothing to check for sub-segments */
+       if (is_header == 0)
                return;
 
-       /* check pkt consistency */
-       else if (m->type == RTE_MBUF_PKT) {
-
-               /* nothing to check for sub-segments */
-               if (is_header == 0)
-                       return;
-
-               nb_segs = m->pkt.nb_segs;
-               m_seg = m;
-               while (m_seg && nb_segs != 0) {
-                       m_seg = m_seg->pkt.next;
-                       nb_segs --;
-               }
-               if (nb_segs != 0)
-                       rte_panic("bad nb_segs\n");
-               return;
+       nb_segs = m->pkt.nb_segs;
+       m_seg = m;
+       while (m_seg && nb_segs != 0) {
+               m_seg = m_seg->pkt.next;
+               nb_segs--;
        }
-
-       rte_panic("unknown mbuf type\n");
+       if (nb_segs != 0)
+               rte_panic("bad nb_segs\n");
 }
 
 /* dump a mbuf on console */
@@ -198,7 +170,7 @@ rte_pktmbuf_dump(FILE *f, const struct rte_mbuf *m, unsigned dump_len)
        unsigned int len;
        unsigned nb_segs;
 
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 
        fprintf(f, "dump mbuf at 0x%p, phys=%"PRIx64", buf_len=%u\n",
               m, (uint64_t)m->buf_physaddr, (unsigned)m->buf_len);
@@ -208,7 +180,7 @@ rte_pktmbuf_dump(FILE *f, const struct rte_mbuf *m, unsigned dump_len)
        nb_segs = m->pkt.nb_segs;
 
        while (m && nb_segs != 0) {
-               __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 0);
+               __rte_mbuf_sanity_check(m, 0);
 
                fprintf(f, "  segment at 0x%p, data=0x%p, data_len=%u\n",
                       m, m->pkt.data, (unsigned)m->pkt.data_len);
index fbd1c7b..a0ae2e9 100644 (file)
  * buffers. The message buffers are stored in a mempool, using the
  * RTE mempool library.
  *
- * This library provide an API to allocate/free mbufs, manipulate
- * control message buffer (ctrlmbuf), which are generic message
- * buffers, and packet buffers (pktmbuf), which are used to carry
- * network packets.
+ * This library provide an API to allocate/free packet mbufs, which are
+ * used to carry network packets.
  *
  * To understand the concepts of packet buffers or mbufs, you
  * should read "TCP/IP Illustrated, Volume 2: The Implementation,
  * Addison-Wesley, 1995, ISBN 0-201-63354-X from Richard Stevens"
  * http://www.kohala.com/start/tcpipiv2.html
- *
- * The main modification of this implementation is the use of mbuf for
- * transports other than packets. mbufs can have other types.
  */
 
 #include <stdint.h>
@@ -70,15 +65,6 @@ extern "C" {
 /* deprecated feature, renamed in RTE_MBUF_REFCNT */
 #pragma GCC poison RTE_MBUF_SCATTER_GATHER
 
-/**
- * A control message buffer.
- */
-struct rte_ctrlmbuf {
-       void *data;        /**< Pointer to data. */
-       uint32_t data_len; /**< Length of data. */
-};
-
-
 /*
  * Packet Offload Features Flags. It also carry packet type information.
  * Critical resources. Both rx/tx shared these bits. Be cautious on any change
@@ -173,15 +159,7 @@ struct rte_pktmbuf {
 };
 
 /**
- * This enum indicates the mbuf type.
- */
-enum rte_mbuf_type {
-       RTE_MBUF_CTRL,  /**< Control mbuf. */
-       RTE_MBUF_PKT,   /**< Packet mbuf. */
-};
-
-/**
- * The generic rte_mbuf, containing a packet mbuf or a control mbuf.
+ * The generic rte_mbuf, containing a packet mbuf.
  */
 struct rte_mbuf {
        struct rte_mempool *pool; /**< Pool from which mbuf was allocated. */
@@ -204,14 +182,10 @@ struct rte_mbuf {
 #else
        uint16_t refcnt_reserved;     /**< Do not use this field */
 #endif
-       uint8_t type;                 /**< Type of mbuf. */
-       uint8_t reserved;             /**< Unused field. Required for padding. */
+       uint16_t reserved;            /**< Unused field. Required for padding */
        uint16_t ol_flags;            /**< Offload features. */
 
-       union {
-               struct rte_ctrlmbuf ctrl;
-               struct rte_pktmbuf pkt;
-       };
+       struct rte_pktmbuf pkt;
 
        union {
                uint8_t metadata[0];
@@ -274,12 +248,12 @@ struct rte_pktmbuf_pool_private {
 #ifdef RTE_LIBRTE_MBUF_DEBUG
 
 /**  check mbuf type in debug mode */
-#define __rte_mbuf_sanity_check(m, t, is_h) rte_mbuf_sanity_check(m, t, is_h)
+#define __rte_mbuf_sanity_check(m, is_h) rte_mbuf_sanity_check(m, is_h)
 
 /**  check mbuf type in debug mode if mbuf pointer is not null */
-#define __rte_mbuf_sanity_check_raw(m, t, is_h)        do {       \
+#define __rte_mbuf_sanity_check_raw(m, is_h)   do {       \
        if ((m) != NULL)                                   \
-               rte_mbuf_sanity_check(m, t, is_h);          \
+               rte_mbuf_sanity_check(m, is_h);          \
 } while (0)
 
 /**  MBUF asserts in debug mode */
@@ -291,13 +265,13 @@ if (!(exp)) {                                                        \
 #else /*  RTE_LIBRTE_MBUF_DEBUG */
 
 /**  check mbuf type in debug mode */
-#define __rte_mbuf_sanity_check(m, t, is_h) do { } while(0)
+#define __rte_mbuf_sanity_check(m, is_h) do { } while (0)
 
 /**  check mbuf type in debug mode if mbuf pointer is not null */
-#define __rte_mbuf_sanity_check_raw(m, t, is_h) do { } while(0)
+#define __rte_mbuf_sanity_check_raw(m, is_h) do { } while (0)
 
 /**  MBUF asserts in debug mode */
-#define RTE_MBUF_ASSERT(exp)                do { } while(0)
+#define RTE_MBUF_ASSERT(exp)                do { } while (0)
 
 #endif /*  RTE_LIBRTE_MBUF_DEBUG */
 
@@ -401,20 +375,17 @@ rte_mbuf_refcnt_set(struct rte_mbuf *m, uint16_t new_value)
  *
  * @param m
  *   The mbuf to be checked.
- * @param t
- *   The expected type of the mbuf.
  * @param is_header
  *   True if the mbuf is a packet header, false if it is a sub-segment
  *   of a packet (in this case, some fields like nb_segs are not checked)
  */
 void
-rte_mbuf_sanity_check(const struct rte_mbuf *m, enum rte_mbuf_type t,
-                     int is_header);
+rte_mbuf_sanity_check(const struct rte_mbuf *m, int is_header);
 
 /**
  * @internal Allocate a new mbuf from mempool *mp*.
  * The use of that function is reserved for RTE internal needs.
- * Please use either rte_ctrlmbuf_alloc() or rte_pktmbuf_alloc().
+ * Please use rte_pktmbuf_alloc().
  *
  * @param mp
  *   The mempool from which mbuf is allocated.
@@ -439,7 +410,7 @@ static inline struct rte_mbuf *__rte_mbuf_raw_alloc(struct rte_mempool *mp)
 /**
  * @internal Put mbuf back into its original mempool.
  * The use of that function is reserved for RTE internal needs.
- * Please use either rte_ctrlmbuf_free() or rte_pktmbuf_free().
+ * Please use rte_pktmbuf_free().
  *
  * @param m
  *   The mbuf to be freed.
@@ -475,7 +446,7 @@ __rte_mbuf_raw_free(struct rte_mbuf *m)
  *   The index of the mbuf in the pool table.
  */
 void rte_ctrlmbuf_init(struct rte_mempool *mp, void *opaque_arg,
-                      void *m, unsigned i);
+               void *m, unsigned i);
 
 /**
  * Allocate a new mbuf (type is ctrl) from mempool *mp*.
@@ -489,16 +460,7 @@ void rte_ctrlmbuf_init(struct rte_mempool *mp, void *opaque_arg,
  *   - The pointer to the new mbuf on success.
  *   - NULL if allocation failed.
  */
-static inline struct rte_mbuf *rte_ctrlmbuf_alloc(struct rte_mempool *mp)
-{
-       struct rte_mbuf *m;
-       if ((m = __rte_mbuf_raw_alloc(mp)) != NULL) {
-               m->ctrl.data = m->buf_addr;
-               m->ctrl.data_len = 0;
-               __rte_mbuf_sanity_check(m, RTE_MBUF_CTRL, 0);
-       }
-       return (m);
-}
+#define rte_ctrlmbuf_alloc(mp) rte_pktmbuf_alloc(mp)
 
 /**
  * Free a control mbuf back into its original mempool.
@@ -506,14 +468,7 @@ static inline struct rte_mbuf *rte_ctrlmbuf_alloc(struct rte_mempool *mp)
  * @param m
  *   The control mbuf to be freed.
  */
-static inline void rte_ctrlmbuf_free(struct rte_mbuf *m)
-{
-       __rte_mbuf_sanity_check(m, RTE_MBUF_CTRL, 0);
-#ifdef RTE_MBUF_REFCNT
-       if (rte_mbuf_refcnt_update(m, -1) == 0)
-#endif /* RTE_MBUF_REFCNT */
-               __rte_mbuf_raw_free(m);
-}
+#define rte_ctrlmbuf_free(m) rte_pktmbuf_free(m)
 
 /**
  * A macro that returns the pointer to the carried data.
@@ -523,7 +478,7 @@ static inline void rte_ctrlmbuf_free(struct rte_mbuf *m)
  * @param m
  *   The control mbuf.
  */
-#define rte_ctrlmbuf_data(m) ((m)->ctrl.data)
+#define rte_ctrlmbuf_data(m) ((m)->pkt.data)
 
 /**
  * A macro that returns the length of the carried data.
@@ -533,15 +488,15 @@ static inline void rte_ctrlmbuf_free(struct rte_mbuf *m)
  * @param m
  *   The control mbuf.
  */
-#define rte_ctrlmbuf_len(m) ((m)->ctrl.data_len)
+#define rte_ctrlmbuf_len(m) rte_pktmbuf_data_len(m)
 
 /* Operations on pkt mbuf */
 
 /**
  * The packet mbuf constructor.
  *
- * This function initializes some fields in the mbuf structure that are not
- * modified by the user once created (mbuf type, origin pool, buffer start
+ * This function initializes some fields in the mbuf structure that are
+ * not modified by the user once created (origin pool, buffer start
  * address, and so on). This function is given as a callback function to
  * rte_mempool_create() at pool creation time.
  *
@@ -602,11 +557,11 @@ static inline void rte_pktmbuf_reset(struct rte_mbuf *m)
        m->pkt.data = (char*) m->buf_addr + buf_ofs;
 
        m->pkt.data_len = 0;
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 }
 
 /**
- * Allocate a new mbuf (type is pkt) from a mempool.
+ * Allocate a new mbuf from a mempool.
  *
  * This new mbuf contains one segment, which has a length of 0. The pointer
  * to data is initialized to have some bytes of headroom in the buffer
@@ -662,8 +617,8 @@ static inline void rte_pktmbuf_attach(struct rte_mbuf *mi, struct rte_mbuf *md)
        mi->pkt.nb_segs = 1;
        mi->ol_flags = md->ol_flags;
 
-       __rte_mbuf_sanity_check(mi, RTE_MBUF_PKT, 1);
-       __rte_mbuf_sanity_check(md, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check(mi, 1);
+       __rte_mbuf_sanity_check(md, 0);
 }
 
 /**
@@ -700,7 +655,7 @@ static inline void rte_pktmbuf_detach(struct rte_mbuf *m)
 static inline struct rte_mbuf* __attribute__((always_inline))
 __rte_pktmbuf_prefree_seg(struct rte_mbuf *m)
 {
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check(m, 0);
 
 #ifdef RTE_MBUF_REFCNT
        if (likely (rte_mbuf_refcnt_read(m) == 1) ||
@@ -755,7 +710,7 @@ static inline void rte_pktmbuf_free(struct rte_mbuf *m)
 {
        struct rte_mbuf *m_next;
 
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 
        while (m != NULL) {
                m_next = m->pkt.next;
@@ -816,7 +771,7 @@ static inline struct rte_mbuf *rte_pktmbuf_clone(struct rte_mbuf *md,
                return (NULL);
        }
 
-       __rte_mbuf_sanity_check(mc, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(mc, 1);
        return (mc);
 }
 
@@ -833,7 +788,7 @@ static inline struct rte_mbuf *rte_pktmbuf_clone(struct rte_mbuf *md,
  */
 static inline void rte_pktmbuf_refcnt_update(struct rte_mbuf *m, int16_t v)
 {
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 
        do {
                rte_mbuf_refcnt_update(m, v);
@@ -852,7 +807,7 @@ static inline void rte_pktmbuf_refcnt_update(struct rte_mbuf *m, int16_t v)
  */
 static inline uint16_t rte_pktmbuf_headroom(const struct rte_mbuf *m)
 {
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
        return (uint16_t) ((char*) m->pkt.data - (char*) m->buf_addr);
 }
 
@@ -866,7 +821,7 @@ static inline uint16_t rte_pktmbuf_headroom(const struct rte_mbuf *m)
  */
 static inline uint16_t rte_pktmbuf_tailroom(const struct rte_mbuf *m)
 {
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
        return (uint16_t)(m->buf_len - rte_pktmbuf_headroom(m) -
                          m->pkt.data_len);
 }
@@ -883,7 +838,7 @@ static inline struct rte_mbuf *rte_pktmbuf_lastseg(struct rte_mbuf *m)
 {
        struct rte_mbuf *m2 = (struct rte_mbuf *)m;
 
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
        while (m2->pkt.next != NULL)
                m2 = m2->pkt.next;
        return m2;
@@ -941,7 +896,7 @@ static inline struct rte_mbuf *rte_pktmbuf_lastseg(struct rte_mbuf *m)
 static inline char *rte_pktmbuf_prepend(struct rte_mbuf *m,
                                        uint16_t len)
 {
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 
        if (unlikely(len > rte_pktmbuf_headroom(m)))
                return NULL;
@@ -973,7 +928,7 @@ static inline char *rte_pktmbuf_append(struct rte_mbuf *m, uint16_t len)
        void *tail;
        struct rte_mbuf *m_last;
 
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 
        m_last = rte_pktmbuf_lastseg(m);
        if (unlikely(len > rte_pktmbuf_tailroom(m_last)))
@@ -1001,7 +956,7 @@ static inline char *rte_pktmbuf_append(struct rte_mbuf *m, uint16_t len)
  */
 static inline char *rte_pktmbuf_adj(struct rte_mbuf *m, uint16_t len)
 {
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 
        if (unlikely(len > m->pkt.data_len))
                return NULL;
@@ -1030,7 +985,7 @@ static inline int rte_pktmbuf_trim(struct rte_mbuf *m, uint16_t len)
 {
        struct rte_mbuf *m_last;
 
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
 
        m_last = rte_pktmbuf_lastseg(m);
        if (unlikely(len > m_last->pkt.data_len))
@@ -1052,7 +1007,7 @@ static inline int rte_pktmbuf_trim(struct rte_mbuf *m, uint16_t len)
  */
 static inline int rte_pktmbuf_is_contiguous(const struct rte_mbuf *m)
 {
-       __rte_mbuf_sanity_check(m, RTE_MBUF_PKT, 1);
+       __rte_mbuf_sanity_check(m, 1);
        return !!(m->pkt.nb_segs == 1);
 }
 
index f254858..3304f50 100644 (file)
@@ -85,7 +85,7 @@ rte_rxmbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
        return (m);
 }
 
index 977c4a2..b0112be 100644 (file)
@@ -90,7 +90,7 @@ rte_rxmbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
        return (m);
 }
 
index f153844..e1b3e2b 100644 (file)
@@ -470,7 +470,7 @@ rte_rxmbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
 
        return m;
 }
@@ -684,7 +684,6 @@ i40e_rx_alloc_bufs(struct i40e_rx_queue *rxq)
        for (i = 0; i < rxq->rx_free_thresh; i++) {
                mb = rxep[i].mbuf;
                rte_mbuf_refcnt_set(mb, 1);
-               mb->type = RTE_MBUF_PKT;
                mb->pkt.next = NULL;
                mb->pkt.data = (char *)mb->buf_addr + RTE_PKTMBUF_HEADROOM;
                mb->pkt.nb_segs = 1;
@@ -2131,7 +2130,6 @@ i40e_alloc_rx_queue_mbufs(struct i40e_rx_queue *rxq)
                }
 
                rte_mbuf_refcnt_set(mbuf, 1);
-               mbuf->type = RTE_MBUF_PKT;
                mbuf->pkt.next = NULL;
                mbuf->pkt.data = (char *)mbuf->buf_addr + RTE_PKTMBUF_HEADROOM;
                mbuf->pkt.nb_segs = 1;
index dfc2076..40ea4f8 100644 (file)
@@ -96,7 +96,7 @@ rte_rxmbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
        return (m);
 }
 
@@ -995,7 +995,6 @@ ixgbe_rx_alloc_bufs(struct igb_rx_queue *rxq)
                /* populate the static rte mbuf fields */
                mb = rxep[i].mbuf;
                rte_mbuf_refcnt_set(mb, 1);
-               mb->type = RTE_MBUF_PKT;
                mb->pkt.next = NULL;
                mb->pkt.data = (char *)mb->buf_addr + RTE_PKTMBUF_HEADROOM;
                mb->pkt.nb_segs = 1;
@@ -3213,7 +3212,6 @@ ixgbe_alloc_rx_queue_mbufs(struct igb_rx_queue *rxq)
                }
 
                rte_mbuf_refcnt_set(mbuf, 1);
-               mbuf->type = RTE_MBUF_PKT;
                mbuf->pkt.next = NULL;
                mbuf->pkt.data = (char *)mbuf->buf_addr + RTE_PKTMBUF_HEADROOM;
                mbuf->pkt.nb_segs = 1;
index 0b10108..a63ef17 100644 (file)
@@ -238,7 +238,7 @@ rte_rxmbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
 
        return m;
 }
index 0dfce44..9a9918d 100644 (file)
@@ -100,7 +100,7 @@ rte_rxmbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
        return m;
 }
 
index 450332a..ba82319 100644 (file)
@@ -81,7 +81,7 @@ rte_rxmbuf_alloc(struct rte_mempool *mp)
        struct rte_mbuf *m;
 
        m = __rte_mbuf_raw_alloc(mp);
-       __rte_mbuf_sanity_check_raw(m, RTE_MBUF_PKT, 0);
+       __rte_mbuf_sanity_check_raw(m, 0);
 
        return m;
 }