net/bnxt: remove software prefetches from AVX2 Rx
[dpdk.git] / drivers / net / bnxt / bnxt_rxtx_vec_avx2.c
index e4905b4..34bd22e 100644 (file)
@@ -92,11 +92,9 @@ recv_burst_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
        cons = raw_cons & (cp_ring_size - 1);
        mbcons = (raw_cons / 2) & (rx_ring_size - 1);
 
-       /* Prefetch first four descriptor pairs. */
-       rte_prefetch0(&cp_desc_ring[cons + 0]);
-       rte_prefetch0(&cp_desc_ring[cons + 4]);
-       rte_prefetch0(&cp_desc_ring[cons + 8]);
-       rte_prefetch0(&cp_desc_ring[cons + 12]);
+       /* Return immediately if there is not at least one completed packet. */
+       if (!bnxt_cpr_cmp_valid(&cp_desc_ring[cons], raw_cons, cp_ring_size))
+               return 0;
 
        /* Ensure that we do not go past the ends of the rings. */
        nb_pkts = RTE_MIN(nb_pkts, RTE_MIN(rx_ring_size - mbcons,
@@ -132,14 +130,6 @@ recv_burst_vec_avx2(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)
                _mm256_storeu_si256((void *)&rx_pkts[i + 4], t0);
 #endif
 
-               /* Prefetch eight descriptor pairs for next iteration. */
-               if (i + BNXT_RX_DESCS_PER_LOOP_VEC256 < nb_pkts) {
-                       rte_prefetch0(&cp_desc_ring[cons + 16]);
-                       rte_prefetch0(&cp_desc_ring[cons + 20]);
-                       rte_prefetch0(&cp_desc_ring[cons + 24]);
-                       rte_prefetch0(&cp_desc_ring[cons + 28]);
-               }
-
                /*
                 * Load eight receive completion descriptors into 256-bit
                 * registers. Loads are issued in reverse order in order to