Add support of AVX512 data path for split queue model.

Signed-off-by: Wenjun Wu <wenjun1...@intel.com>
Signed-off-by: Mingxia Liu <mingxia....@intel.com>
---
 drivers/net/cpfl/cpfl_rxtx.c            | 25 +++++++++++++++++++++++++
 drivers/net/cpfl/cpfl_rxtx_vec_common.h | 14 +++++++++++++-
 2 files changed, 38 insertions(+), 1 deletion(-)

diff --git a/drivers/net/cpfl/cpfl_rxtx.c b/drivers/net/cpfl/cpfl_rxtx.c
index efe13775e6..9277249704 100644
--- a/drivers/net/cpfl/cpfl_rxtx.c
+++ b/drivers/net/cpfl/cpfl_rxtx.c
@@ -772,6 +772,20 @@ cpfl_set_rx_function(struct rte_eth_dev *dev)
 
 #ifdef RTE_ARCH_X86
        if (vport->rxq_model == VIRTCHNL2_QUEUE_MODEL_SPLIT) {
+#ifdef RTE_ARCH_X86
+               if (vport->rx_vec_allowed) {
+                       for (i = 0; i < dev->data->nb_tx_queues; i++) {
+                               rxq = dev->data->rx_queues[i];
+                               (void)idpf_splitq_rx_vec_setup(rxq);
+                       }
+#ifdef CC_AVX512_SUPPORT
+                       if (vport->rx_use_avx512) {
+                               dev->rx_pkt_burst = 
idpf_splitq_recv_pkts_avx512;
+                               return;
+                       }
+#endif
+               }
+#endif
                dev->rx_pkt_burst = idpf_splitq_recv_pkts;
        } else {
                if (vport->rx_vec_allowed) {
@@ -833,6 +847,17 @@ cpfl_set_tx_function(struct rte_eth_dev *dev)
 #endif /* RTE_ARCH_X86 */
 
        if (vport->txq_model == VIRTCHNL2_QUEUE_MODEL_SPLIT) {
+#ifdef RTE_ARCH_X86
+               if (vport->tx_vec_allowed) {
+#ifdef CC_AVX512_SUPPORT
+                       if (vport->tx_use_avx512) {
+                               dev->tx_pkt_burst = 
idpf_splitq_xmit_pkts_avx512;
+                               dev->tx_pkt_prepare = idpf_prep_pkts;
+                               return;
+                       }
+#endif
+               }
+#endif
                dev->tx_pkt_burst = idpf_splitq_xmit_pkts;
                dev->tx_pkt_prepare = idpf_prep_pkts;
        } else {
diff --git a/drivers/net/cpfl/cpfl_rxtx_vec_common.h 
b/drivers/net/cpfl/cpfl_rxtx_vec_common.h
index a411cf6a32..fc3ace89dd 100644
--- a/drivers/net/cpfl/cpfl_rxtx_vec_common.h
+++ b/drivers/net/cpfl/cpfl_rxtx_vec_common.h
@@ -63,15 +63,27 @@ cpfl_tx_vec_queue_default(struct idpf_tx_queue *txq)
        return CPFL_VECTOR_PATH;
 }
 
+static inline int
+cpfl_rx_splitq_vec_default(struct idpf_rx_queue *rxq)
+{
+       if (rxq->bufq2->rx_buf_len < rxq->max_pkt_len)
+               return -1;
+
+       return CPFL_VECTOR_PATH;
+}
+
 static inline int
 cpfl_rx_vec_dev_check_default(struct rte_eth_dev *dev)
 {
+       struct idpf_vport *vport = dev->data->dev_private;
        struct idpf_rx_queue *rxq;
        int i, ret = 0;
 
        for (i = 0; i < dev->data->nb_rx_queues; i++) {
                rxq = dev->data->rx_queues[i];
-               ret = (cpfl_rx_vec_queue_default(rxq));
+               ret = cpfl_rx_vec_queue_default(rxq) ||
+                     (vport->rxq_model == VIRTCHNL2_QUEUE_MODEL_SPLIT &&
+                      cpfl_rx_splitq_vec_default(rxq));
                if (ret < 0)
                        return -1;
        }
-- 
2.25.1

Reply via email to