This patch enable multiple Tx queues handling on a lcore.

Signed-off-by: Leyi Rong <leyi.r...@intel.com>
---
 examples/l3fwd/l3fwd_common.h        |  6 ++---
 examples/l3fwd/l3fwd_em.c            |  2 +-
 examples/l3fwd/l3fwd_em_hlm.h        |  4 ++--
 examples/l3fwd/l3fwd_em_sequential.h |  5 +++--
 examples/l3fwd/l3fwd_lpm.c           |  2 +-
 examples/l3fwd/l3fwd_lpm_sse.h       |  5 +++--
 examples/l3fwd/l3fwd_sse.h           |  4 ++--
 examples/l3fwd/main.c                | 33 ++++++++++++++++------------
 8 files changed, 34 insertions(+), 27 deletions(-)

diff --git a/examples/l3fwd/l3fwd_common.h b/examples/l3fwd/l3fwd_common.h
index 7d83ff641..ab114af8c 100644
--- a/examples/l3fwd/l3fwd_common.h
+++ b/examples/l3fwd/l3fwd_common.h
@@ -178,8 +178,8 @@ static const struct {
 };
 
 static __rte_always_inline void
-send_packetsx4(struct lcore_conf *qconf, uint16_t port, struct rte_mbuf *m[],
-               uint32_t num)
+send_packetsx4(struct lcore_conf *qconf, uint16_t port, uint16_t queueid,
+              struct rte_mbuf *m[], uint32_t num)
 {
        uint32_t len, j, n;
 
@@ -190,7 +190,7 @@ send_packetsx4(struct lcore_conf *qconf, uint16_t port, 
struct rte_mbuf *m[],
         * then send them straightway.
         */
        if (num >= MAX_TX_BURST && len == 0) {
-               n = rte_eth_tx_burst(port, qconf->tx_queue_id[port], m, num);
+               n = rte_eth_tx_burst(port, queueid, m, num);
                if (unlikely(n < num)) {
                        do {
                                rte_pktmbuf_free(m[n]);
diff --git a/examples/l3fwd/l3fwd_em.c b/examples/l3fwd/l3fwd_em.c
index fdbee70b4..e5332455d 100644
--- a/examples/l3fwd/l3fwd_em.c
+++ b/examples/l3fwd/l3fwd_em.c
@@ -687,7 +687,7 @@ em_main_loop(__rte_unused void *dummy)
 
 #if defined RTE_ARCH_X86 || defined RTE_MACHINE_CPUFLAG_NEON
                        l3fwd_em_send_packets(nb_rx, pkts_burst,
-                                                       portid, qconf);
+                                                       portid, queueid, qconf);
 #else
                        l3fwd_em_no_opt_send_packets(nb_rx, pkts_burst,
                                                        portid, qconf);
diff --git a/examples/l3fwd/l3fwd_em_hlm.h b/examples/l3fwd/l3fwd_em_hlm.h
index 79812716c..1e60e4f84 100644
--- a/examples/l3fwd/l3fwd_em_hlm.h
+++ b/examples/l3fwd/l3fwd_em_hlm.h
@@ -183,7 +183,7 @@ em_get_dst_port(const struct lcore_conf *qconf, struct 
rte_mbuf *pkt,
  */
 static inline void
 l3fwd_em_send_packets(int nb_rx, struct rte_mbuf **pkts_burst,
-               uint16_t portid, struct lcore_conf *qconf)
+               uint16_t portid, uint16_t queueid, struct lcore_conf *qconf)
 {
        int32_t i, j, pos;
        uint16_t dst_port[MAX_PKT_BURST];
@@ -238,7 +238,7 @@ l3fwd_em_send_packets(int nb_rx, struct rte_mbuf 
**pkts_burst,
        for (; j < nb_rx; j++)
                dst_port[j] = em_get_dst_port(qconf, pkts_burst[j], portid);
 
-       send_packets_multi(qconf, pkts_burst, dst_port, nb_rx);
+       send_packets_multi(qconf, pkts_burst, dst_port, queueid, nb_rx);
 
 }
 
diff --git a/examples/l3fwd/l3fwd_em_sequential.h 
b/examples/l3fwd/l3fwd_em_sequential.h
index b231b9994..39a4c2fca 100644
--- a/examples/l3fwd/l3fwd_em_sequential.h
+++ b/examples/l3fwd/l3fwd_em_sequential.h
@@ -74,7 +74,8 @@ em_get_dst_port(const struct lcore_conf *qconf, struct 
rte_mbuf *pkt,
  */
 static inline void
 l3fwd_em_send_packets(int nb_rx, struct rte_mbuf **pkts_burst,
-                       uint16_t portid, struct lcore_conf *qconf)
+                     uint16_t portid, uint16_t queueid,
+                     struct lcore_conf *qconf)
 {
        int32_t i, j;
        uint16_t dst_port[MAX_PKT_BURST];
@@ -93,7 +94,7 @@ l3fwd_em_send_packets(int nb_rx, struct rte_mbuf **pkts_burst,
                dst_port[j] = em_get_dst_port(qconf, pkts_burst[j], portid);
        }
 
-       send_packets_multi(qconf, pkts_burst, dst_port, nb_rx);
+       send_packets_multi(qconf, pkts_burst, dst_port, queueid, nb_rx);
 }
 
 /*
diff --git a/examples/l3fwd/l3fwd_lpm.c b/examples/l3fwd/l3fwd_lpm.c
index 91eb74272..8be59ac58 100644
--- a/examples/l3fwd/l3fwd_lpm.c
+++ b/examples/l3fwd/l3fwd_lpm.c
@@ -243,7 +243,7 @@ lpm_main_loop(__rte_unused void *dummy)
 #if defined RTE_ARCH_X86 || defined RTE_MACHINE_CPUFLAG_NEON \
                         || defined RTE_ARCH_PPC_64
                        l3fwd_lpm_send_packets(nb_rx, pkts_burst,
-                                               portid, qconf);
+                                               portid, queueid, qconf);
 #else
                        l3fwd_lpm_no_opt_send_packets(nb_rx, pkts_burst,
                                                        portid, qconf);
diff --git a/examples/l3fwd/l3fwd_lpm_sse.h b/examples/l3fwd/l3fwd_lpm_sse.h
index 3f637a23d..cd68179b7 100644
--- a/examples/l3fwd/l3fwd_lpm_sse.h
+++ b/examples/l3fwd/l3fwd_lpm_sse.h
@@ -83,7 +83,8 @@ processx4_step2(const struct lcore_conf *qconf,
  */
 static inline void
 l3fwd_lpm_send_packets(int nb_rx, struct rte_mbuf **pkts_burst,
-                       uint16_t portid, struct lcore_conf *qconf)
+                      uint16_t portid, uint16_t queueid,
+                      struct lcore_conf *qconf)
 {
        int32_t j;
        uint16_t dst_port[MAX_PKT_BURST];
@@ -114,7 +115,7 @@ l3fwd_lpm_send_packets(int nb_rx, struct rte_mbuf 
**pkts_burst,
                j++;
        }
 
-       send_packets_multi(qconf, pkts_burst, dst_port, nb_rx);
+       send_packets_multi(qconf, pkts_burst, dst_port, queueid, nb_rx);
 }
 
 #endif /* __L3FWD_LPM_SSE_H__ */
diff --git a/examples/l3fwd/l3fwd_sse.h b/examples/l3fwd/l3fwd_sse.h
index bb565ed54..f91580a4c 100644
--- a/examples/l3fwd/l3fwd_sse.h
+++ b/examples/l3fwd/l3fwd_sse.h
@@ -125,7 +125,7 @@ process_packet(struct rte_mbuf *pkt, uint16_t *dst_port)
  */
 static __rte_always_inline void
 send_packets_multi(struct lcore_conf *qconf, struct rte_mbuf **pkts_burst,
-               uint16_t dst_port[MAX_PKT_BURST], int nb_rx)
+               uint16_t dst_port[MAX_PKT_BURST], uint16_t queueid, int nb_rx)
 {
        int32_t k;
        int j = 0;
@@ -220,7 +220,7 @@ send_packets_multi(struct lcore_conf *qconf, struct 
rte_mbuf **pkts_burst,
                k = pnum[j];
 
                if (likely(pn != BAD_PORT))
-                       send_packetsx4(qconf, pn, pkts_burst + j, k);
+                       send_packetsx4(qconf, pn, queueid, pkts_burst + j, k);
                else
                        for (m = j; m != j + k; m++)
                                rte_pktmbuf_free(pkts_burst[m]);
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index 24ede4290..0fb5642d3 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -941,7 +941,7 @@ l3fwd_poll_resource_setup(void)
                fflush(stdout);
 
                nb_rx_queue = get_port_n_rx_queues(portid);
-               n_tx_queue = nb_lcores;
+               n_tx_queue = nb_rx_queue;
                if (n_tx_queue > MAX_TX_QUEUE_PER_PORT)
                        n_tx_queue = MAX_TX_QUEUE_PER_PORT;
                printf("Creating queues: nb_rxq=%d nb_txq=%u... ",
@@ -1017,6 +1017,7 @@ l3fwd_poll_resource_setup(void)
                for (lcore_id = 0; lcore_id < RTE_MAX_LCORE; lcore_id++) {
                        if (rte_lcore_is_enabled(lcore_id) == 0)
                                continue;
+                       qconf = &lcore_conf[lcore_id];
 
                        if (numa_on)
                                socketid =
@@ -1024,21 +1025,25 @@ l3fwd_poll_resource_setup(void)
                        else
                                socketid = 0;
 
-                       printf("txq=%u,%d,%d ", lcore_id, queueid, socketid);
-                       fflush(stdout);
-
-                       txconf = &dev_info.default_txconf;
-                       txconf->offloads = local_port_conf.txmode.offloads;
-                       ret = rte_eth_tx_queue_setup(portid, queueid, nb_txd,
-                                                    socketid, txconf);
-                       if (ret < 0)
-                               rte_exit(EXIT_FAILURE,
-                                       "rte_eth_tx_queue_setup: err=%d, "
-                                       "port=%d\n", ret, portid);
+                       for (queue = 0; queue < qconf->n_rx_queue; queue++) {
+                               queueid = qconf->rx_queue_list[queue].queue_id;
+                               printf("txq=%u,%d,%d ",
+                                       lcore_id, queueid, socketid);
+                               fflush(stdout);
+
+                               txconf = &dev_info.default_txconf;
+                               txconf->offloads =
+                                       local_port_conf.txmode.offloads;
+                               ret = rte_eth_tx_queue_setup
+                                       (portid, queueid, nb_txd,
+                                        socketid, txconf);
+                               if (ret < 0)
+                                       rte_exit(EXIT_FAILURE,
+                                               "rte_eth_tx_queue_setup: 
err=%d, "
+                                               "port=%d\n", ret, portid);
+                       }
 
-                       qconf = &lcore_conf[lcore_id];
                        qconf->tx_queue_id[portid] = queueid;
-                       queueid++;
 
                        qconf->tx_port_id[qconf->n_tx_port] = portid;
                        qconf->n_tx_port++;
-- 
2.17.1

Reply via email to