X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fmlx5%2Fmlx5_devx.c;h=2cb3bd1f12043ea77c201df0e2c0f8c5aedbad7a;hb=c8238116ece889fe356c54930bca791091ab1938;hp=935cbd03abf4ee84ea023292a8f4fbca2b5fa07b;hpb=6e0a3637d88eabd7785f5ce4f63957e79888dff3;p=dpdk.git diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c index 935cbd03ab..2cb3bd1f12 100644 --- a/drivers/net/mlx5/mlx5_devx.c +++ b/drivers/net/mlx5/mlx5_devx.c @@ -275,6 +275,7 @@ mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev, uint16_t idx) MLX5_WQ_END_PAD_MODE_ALIGN : MLX5_WQ_END_PAD_MODE_NONE; rq_attr.wq_attr.pd = priv->sh->pdn; + rq_attr.counter_set_id = priv->counter_set_id; /* Create RQ using DevX API. */ return mlx5_devx_rq_create(priv->sh->ctx, &rxq_ctrl->obj->rq_obj, wqe_size, log_desc_n, &rq_attr, @@ -438,6 +439,7 @@ mlx5_rxq_obj_hairpin_new(struct rte_eth_dev *dev, uint16_t idx) attr.wq_attr.log_hairpin_num_packets = attr.wq_attr.log_hairpin_data_sz - MLX5_HAIRPIN_QUEUE_STRIDE; + attr.counter_set_id = priv->counter_set_id; tmpl->rq = mlx5_devx_cmd_create_rq(priv->sh->ctx, &attr, rxq_ctrl->socket); if (!tmpl->rq) { @@ -1036,7 +1038,7 @@ mlx5_txq_devx_obj_new(struct rte_eth_dev *dev, uint16_t idx) }; void *reg_addr; uint32_t cqe_n, log_desc_n; - uint32_t wqe_n; + uint32_t wqe_n, wqe_size; int ret = 0; MLX5_ASSERT(txq_data); @@ -1069,8 +1071,28 @@ mlx5_txq_devx_obj_new(struct rte_eth_dev *dev, uint16_t idx) txq_data->cq_pi = 0; txq_data->cq_db = txq_obj->cq_obj.db_rec; *txq_data->cq_db = 0; + /* + * Adjust the amount of WQEs depending on inline settings. + * The number of descriptors should be enough to handle + * the specified number of packets. If queue is being created + * with Verbs the rdma-core does queue size adjustment + * internally in the mlx5_calc_sq_size(), we do the same + * for the queue being created with DevX at this point. + */ + wqe_size = txq_data->tso_en ? + RTE_ALIGN(txq_ctrl->max_tso_header, MLX5_WSEG_SIZE) : 0; + wqe_size += sizeof(struct mlx5_wqe_cseg) + + sizeof(struct mlx5_wqe_eseg) + + sizeof(struct mlx5_wqe_dseg); + if (txq_data->inlen_send) + wqe_size = RTE_MAX(wqe_size, sizeof(struct mlx5_wqe_cseg) + + sizeof(struct mlx5_wqe_eseg) + + RTE_ALIGN(txq_data->inlen_send + + sizeof(uint32_t), + MLX5_WSEG_SIZE)); + wqe_size = RTE_ALIGN(wqe_size, MLX5_WQE_SIZE) / MLX5_WQE_SIZE; /* Create Send Queue object with DevX. */ - wqe_n = RTE_MIN(1UL << txq_data->elts_n, + wqe_n = RTE_MIN((1UL << txq_data->elts_n) * wqe_size, (uint32_t)priv->sh->device_attr.max_qp_wr); log_desc_n = log2above(wqe_n); ret = mlx5_txq_create_devx_sq_resources(dev, idx, log_desc_n);