Now, it is possible for testpmd to create a af_xdp friendly mempool.

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

diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c
index 97d22b860..19675671e 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");
@@ -568,6 +570,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 },
@@ -769,6 +772,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 4c0e2586c..887899919 100644
--- a/app/test-pmd/testpmd.c
+++ b/app/test-pmd/testpmd.c
@@ -171,6 +171,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) */
@@ -486,6 +487,7 @@ set_def_fwd_config(void)
  */
 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];
@@ -503,7 +505,7 @@ mbuf_pool_create(uint16_t mbuf_seg_size, unsigned nb_mbuf,
                rte_mp = rte_mempool_create_empty(pool_name, nb_mbuf,
                        mb_size, (unsigned) mb_mempool_cache,
                        sizeof(struct rte_pktmbuf_pool_private),
-                       socket_id, 0);
+                       socket_id, flags);
                if (rte_mp == NULL)
                        goto err;
 
@@ -518,8 +520,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);
        }
 
 err:
@@ -735,13 +737,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 153abea05..11c2ea681 100644
--- a/app/test-pmd/testpmd.h
+++ b/app/test-pmd/testpmd.h
@@ -386,6 +386,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.13.6

Reply via email to