[dpdk-dev] [PATCH v3 5/5] net/mlx5: add vectorized Rx/Tx burst for SSE4.1

Nélio Laranjeiro nelio.laranjeiro at 6wind.com
Thu Jul 6 09:16:09 CEST 2017


On Wed, Jul 05, 2017 at 11:12:28AM -0700, Yongseok Koh wrote:
>[...]
> diff --git a/drivers/net/mlx5/mlx5_rxtx_vec_sse.c b/drivers/net/mlx5/mlx5_rxtx_vec_sse.c
> new file mode 100644
> index 000000000..4595f7a33
> --- /dev/null
> +++ b/drivers/net/mlx5/mlx5_rxtx_vec_sse.c
> @@ -0,0 +1,1378 @@
>[...]
> +
> +#include <assert.h>
> +#include <stdint.h>
> +#include <string.h>
> +#include <stdlib.h>
> +#include <smmintrin.h>
> +
> +/* Verbs header. */
> +#include <infiniband/verbs.h>
> +#include <infiniband/mlx5_hw.h>
> +#include <infiniband/arch.h>

Pragma on Verbs must remain, their headers are still not clear for
pdentic compilation.

>[...]
> +/**
> + * Replenish buffers for RX in bulk.
> + *
> + * @param rxq
> + *   Pointer to RX queue structure.
> + * @param n
> + *   Number of buffers to be replenished.
> + */
> +static inline void
> +rxq_replenish_bulk_mbuf(struct rxq *rxq, uint16_t n)
> +{
> +	const uint16_t q_n = 1 << rxq->elts_n;
> +	const uint16_t q_mask = q_n - 1;
> +	const uint16_t elts_idx = rxq->rq_ci & q_mask;
> +	struct rte_mbuf **elts = &(*rxq->elts)[elts_idx];
> +	volatile struct mlx5_wqe_data_seg *wq = &(*rxq->wqes)[elts_idx];
> +	unsigned int i;
> +
> +	assert(n >= MLX5_VPMD_RXQ_RPLNSH_THRESH);
> +	assert(n <= (uint16_t)(q_n - (rxq->rq_ci - rxq->rq_pi)));
> +	assert(MLX5_VPMD_RXQ_RPLNSH_THRESH > MLX5_VPMD_DESCS_PER_LOOP);

Info: as the PMD is compiled in C11, you could use the static_assert
which verifies at compilation time the constants are correct.  
(I am not asking to change it now, we can make a compain to change
all this kind of assert at onces).

Unless the pragma which must remain on Verbs header:

Acked-by: Nelio Laranjeiro <nelio.laranjeiro at 6wind.com>

Great work.
Thanks,

-- 
Nélio Laranjeiro
6WIND


More information about the dev mailing list