X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fmlx5%2Fmlx5_rxtx_vec.h;h=4220b08dd21c6f951ae7e8fc5701d54f0f95c43f;hb=e2b4925ef7c11c4271b2c8fb46154d347cba26e2;hp=5df8e291e60a1dc2a336bfe83a23cd18332b8b83;hpb=12d468a62bc19ca08ee9964dcb923f67f87fba7d;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_rxtx_vec.h b/drivers/net/mlx5/mlx5_rxtx_vec.h index 5df8e291e6..4220b08dd2 100644 --- a/drivers/net/mlx5/mlx5_rxtx_vec.h +++ b/drivers/net/mlx5/mlx5_rxtx_vec.h @@ -102,9 +102,21 @@ mlx5_rx_replenish_bulk_mbuf(struct mlx5_rxq_data *rxq, uint16_t n) return; } for (i = 0; i < n; ++i) { - void *buf_addr = rte_mbuf_buf_addr(elts[i], rxq->mp); + void *buf_addr; + /* + * Load the virtual address for Rx WQE. non-x86 processors + * (mostly RISC such as ARM and Power) are more vulnerable to + * load stall. For x86, reducing the number of instructions + * seems to matter most. + */ +#ifdef RTE_ARCH_X86_64 + buf_addr = elts[i]->buf_addr; + assert(buf_addr == rte_mbuf_buf_addr(elts[i], rxq->mp)); +#else + buf_addr = rte_mbuf_buf_addr(elts[i], rxq->mp); assert(buf_addr == elts[i]->buf_addr); +#endif wq[i].addr = rte_cpu_to_be_64((uintptr_t)buf_addr + RTE_PKTMBUF_HEADROOM); /* If there's only one MR, no need to replace LKey in WQE. */