When create rte_mempool, flags can be parsed from command line.
Now, it is possible for testpmd to create a af_xdp friendly
mempool (which enable zero copy).

Signed-off-by: Qi Zhang <qi.z.zh...@intel.com>
Signed-off-by: Xiaolong Ye <xiaolong...@intel.com>
---
 app/test-pmd/parameters.c | 12 ++++++++++++
 app/test-pmd/testpmd.c    | 17 ++++++++++-------
 app/test-pmd/testpmd.h    |  1 +
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 38b419767..9d5be0007 100644
--- a/app/test-pmd/parameters.c
+++ b/app/test-pmd/parameters.c
@@ -61,6 +61,7 @@ usage(char* progname)
               "--tx-first | --stats-period=PERIOD | "
               "--coremask=COREMASK --portmask=PORTMASK --numa "
               "--mbuf-size= | --total-num-mbufs= | "
+              "--mp-flags= | "
               "--nb-cores= | --nb-ports= | "
 #ifdef RTE_LIBRTE_CMDLINE
               "--eth-peers-configfile= | "
@@ -105,6 +106,7 @@ usage(char* progname)
        printf("  --socket-num=N: set socket from which all memory is allocated 
"
               "in NUMA mode.\n");
        printf("  --mbuf-size=N: set the data size of mbuf to N bytes.\n");
+       printf("  --mp-flags=N: set the flags when create mbuf memory pool.\n");
        printf("  --total-num-mbufs=N: set the number of mbufs to be allocated "
               "in mbuf pools.\n");
        printf("  --max-pkt-len=N: set the maximum size of packet to N 
bytes.\n");
@@ -585,6 +587,7 @@ launch_args_parse(int argc, char** argv)
                { "ring-numa-config",           1, 0, 0 },
                { "socket-num",                 1, 0, 0 },
                { "mbuf-size",                  1, 0, 0 },
+               { "mp-flags",                   1, 0, 0 },
                { "total-num-mbufs",            1, 0, 0 },
                { "max-pkt-len",                1, 0, 0 },
                { "pkt-filter-mode",            1, 0, 0 },
@@ -811,6 +814,15 @@ launch_args_parse(int argc, char** argv)
                                        rte_exit(EXIT_FAILURE,
                                                 "mbuf-size should be > 0 and < 
65536\n");
                        }
+                       if (!strcmp(lgopts[opt_idx].name, "mp-flags")) {
+                               n = atoi(optarg);
+                               if (n > 0 && n <= 0xFFFF)
+                                       mp_flags = (uint16_t)n;
+                               else
+                                       rte_exit(EXIT_FAILURE,
+                                                "mp-flags should be > 0 and < 
65536\n");
+                       }
+
                        if (!strcmp(lgopts[opt_idx].name, "total-num-mbufs")) {
                                n = atoi(optarg);
                                if (n > 1024)
diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c
index 98c1baa8b..e0519be3c 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -195,6 +195,7 @@ uint32_t burst_tx_delay_time = BURST_TX_WAIT_US;
 uint32_t burst_tx_retry_num = BURST_TX_RETRIES;
 
 uint16_t mbuf_data_size = DEFAULT_MBUF_DATA_SIZE; /**< Mbuf data space size. */
+uint16_t mp_flags = 0; /**< flags parsed when create mempool */
 uint32_t param_total_num_mbufs = 0;  /**< number of mbufs in all pools - if
                                       * specified on command-line. */
 uint16_t stats_period; /**< Period to show statistics (disabled by default) */
@@ -834,6 +835,7 @@ setup_extmem(uint32_t nb_mbufs, uint32_t mbuf_sz, bool huge)
  */
 static void
 mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
+                unsigned int flags,
                 unsigned int socket_id)
 {
        char pool_name[RTE_MEMPOOL_NAMESIZE];
@@ -853,8 +855,8 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
                        /* wrapper to rte_mempool_create() */
                        TESTPMD_LOG(INFO, "preferred mempool ops selected: 
%s\n",
                                        rte_mbuf_best_mempool_ops());
-                       rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf,
-                               mb_mempool_cache, 0, mbuf_seg_size, socket_id);
+                       rte_mp = rte_pktmbuf_pool_create_with_flags(pool_name, 
nb_mbuf,
+                               mb_mempool_cache, 0, mbuf_seg_size, flags, 
socket_id);
                        break;
                }
        case MP_ALLOC_ANON:
@@ -891,8 +893,8 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
 
                        TESTPMD_LOG(INFO, "preferred mempool ops selected: 
%s\n",
                                        rte_mbuf_best_mempool_ops());
-                       rte_mp = rte_pktmbuf_pool_create(pool_name, nb_mbuf,
-                                       mb_mempool_cache, 0, mbuf_seg_size,
+                       rte_mp = rte_pktmbuf_pool_create_with_flags(pool_name, 
nb_mbuf,
+                                       mb_mempool_cache, 0, mbuf_seg_size, 
flags,
                                        heap_socket);
                        break;
                }
@@ -1128,13 +1130,14 @@ init_config(void)
 
                for (i = 0; i < num_sockets; i++)
                        mbuf_pool_create(mbuf_data_size, nb_mbuf_per_pool,
-                                        socket_ids[i]);
+                                        mp_flags, socket_ids[i]);
        } else {
                if (socket_num == UMA_NO_CONFIG)
-                       mbuf_pool_create(mbuf_data_size, nb_mbuf_per_pool, 0);
+                       mbuf_pool_create(mbuf_data_size, nb_mbuf_per_pool,
+                                        mp_flags, 0);
                else
                        mbuf_pool_create(mbuf_data_size, nb_mbuf_per_pool,
-                                                socket_num);
+                                        mp_flags, socket_num);
        }
 
        init_port_config();
diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h
index fa4887853..3ddb70e3e 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -408,6 +408,7 @@ extern uint8_t dcb_config;
 extern uint8_t dcb_test;
 
 extern uint16_t mbuf_data_size; /**< Mbuf data space size. */
+extern uint16_t mp_flags;  /**< flags for mempool creation. */
 extern uint32_t param_total_num_mbufs;
 
 extern uint16_t stats_period;
-- 
2.17.1

Reply via email to