When choosing a vector path to take, an extra condition must be satisfied to ensure the max SIMD bitwidth allows for the CPU enabled path.
Cc: Maxime Coquelin <maxime.coque...@redhat.com> Cc: Chenbo Xia <chenbo....@intel.com> Cc: Zhihong Wang <zhihong.w...@intel.com> Signed-off-by: Ciara Power <ciara.po...@intel.com> --- drivers/net/virtio/virtio_ethdev.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c index dc0093bdf0..f779ce8396 100644 --- a/drivers/net/virtio/virtio_ethdev.c +++ b/drivers/net/virtio/virtio_ethdev.c @@ -1517,9 +1517,11 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) if (vtpci_packed_queue(hw)) { PMD_INIT_LOG(INFO, "virtio: using packed ring %s Tx path on port %u", - hw->use_vec_tx ? "vectorized" : "standard", + (hw->use_vec_tx && rte_get_max_simd_bitwidth() + > RTE_MAX_256_SIMD) ? "vectorized" : "standard", eth_dev->data->port_id); - if (hw->use_vec_tx) + if (hw->use_vec_tx && rte_get_max_simd_bitwidth() + > RTE_MAX_256_SIMD) eth_dev->tx_pkt_burst = virtio_xmit_pkts_packed_vec; else eth_dev->tx_pkt_burst = virtio_xmit_pkts_packed; @@ -1536,7 +1538,8 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) } if (vtpci_packed_queue(hw)) { - if (hw->use_vec_rx) { + if (hw->use_vec_rx && rte_get_max_simd_bitwidth() + > RTE_MAX_256_SIMD) { PMD_INIT_LOG(INFO, "virtio: using packed ring vectorized Rx path on port %u", eth_dev->data->port_id); @@ -1555,7 +1558,8 @@ set_rxtx_funcs(struct rte_eth_dev *eth_dev) eth_dev->rx_pkt_burst = &virtio_recv_pkts_packed; } } else { - if (hw->use_vec_rx) { + if (hw->use_vec_rx && rte_get_max_simd_bitwidth() + >= RTE_MAX_128_SIMD) { PMD_INIT_LOG(INFO, "virtio: using vectorized Rx path on port %u", eth_dev->data->port_id); eth_dev->rx_pkt_burst = virtio_recv_pkts_vec; -- 2.17.1