[dpdk-test-report] |WARNING| pw101875-101887 [PATCH] [v2, 13/13] net/mlx5: add shared Rx queue port datapath support

dpdklab at iol.unh.edu dpdklab at iol.unh.edu
Sat Oct 16 11:29:22 CEST 2021


Test-Label: iol-testing
Test-Status: WARNING
http://dpdk.org/patch/101875

_apply patch failure_

Submitter: Xueming(Steven) Li <xuemingl at nvidia.com>
Date: Saturday, October 16 2021 09:12:13 
Applied on: CommitID:e9123c467dbb471a2d41ea896423a81886ef89d7
Apply patch set 101875-101887 failed:

Checking patch drivers/net/mlx5/mlx5_rx.h...
Checking patch drivers/net/mlx5/mlx5_rxq.c...
Hunk #16 succeeded at 2115 (offset -20 lines).
Hunk #17 succeeded at 2145 (offset -10 lines).
error: while searching for:
		return ret;
	}
	for (i = 0; i < ind_tbl->queues_n; i++)
		mlx5_rxq_get(dev, ind_tbl->queues[i]);
	return 0;
}


error: patch failed: drivers/net/mlx5/mlx5_rxq.c:2135
error: while searching for:
		return ret;
	}
	for (i = 0; i < ind_tbl->queues_n; i++)
		mlx5_rxq_release(dev, ind_tbl->queues[i]);
	return ret;
}


error: patch failed: drivers/net/mlx5/mlx5_rxq.c:2172
Checking patch drivers/net/mlx5/mlx5_trigger.c...
Hunk #1 succeeded at 142 (offset -1 lines).
Hunk #2 succeeded at 216 (offset -1 lines).
Hunk #3 succeeded at 261 (offset -1 lines).
Hunk #4 succeeded at 270 (offset -1 lines).
Hunk #5 succeeded at 305 (offset -1 lines).
Hunk #6 succeeded at 381 (offset -1 lines).
Hunk #7 succeeded at 408 (offset -1 lines).
Hunk #8 succeeded at 506 (offset -1 lines).
Hunk #9 succeeded at 539 (offset -1 lines).
Hunk #10 succeeded at 546 (offset -1 lines).
Hunk #11 succeeded at 555 (offset -1 lines).
Hunk #12 succeeded at 619 (offset -1 lines).
Hunk #13 succeeded at 652 (offset -1 lines).
Hunk #14 succeeded at 953 (offset -1 lines).
Hunk #15 succeeded at 981 (offset -1 lines).
Applied patch drivers/net/mlx5/mlx5_rx.h cleanly.
Applying patch drivers/net/mlx5/mlx5_rxq.c with 2 rejects...
Hunk #1 applied cleanly.
Hunk #2 applied cleanly.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Hunk #6 applied cleanly.
Hunk #7 applied cleanly.
Hunk #8 applied cleanly.
Hunk #9 applied cleanly.
Hunk #10 applied cleanly.
Hunk #11 applied cleanly.
Hunk #12 applied cleanly.
Hunk #13 applied cleanly.
Hunk #14 applied cleanly.
Hunk #15 applied cleanly.
Hunk #16 applied cleanly.
Hunk #17 applied cleanly.
Rejected hunk #18.
Rejected hunk #19.
Applied patch drivers/net/mlx5/mlx5_trigger.c cleanly.
diff a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c	(rejected hunks)
@@ -2135,7 +2192,7 @@ mlx5_ind_table_obj_attach(struct rte_eth_dev *dev,
 		return ret;
 	}
 	for (i = 0; i < ind_tbl->queues_n; i++)
-		mlx5_rxq_get(dev, ind_tbl->queues[i]);
+		mlx5_rxq_ref(dev, ind_tbl->queues[i]);
 	return 0;
 }
 
@@ -2172,7 +2229,7 @@ mlx5_ind_table_obj_detach(struct rte_eth_dev *dev,
 		return ret;
 	}
 	for (i = 0; i < ind_tbl->queues_n; i++)
-		mlx5_rxq_release(dev, ind_tbl->queues[i]);
+		mlx5_rxq_deref(dev, ind_tbl->queues[i]);
 	return ret;
 }
 
Checking patch drivers/net/mlx5/mlx5_rx.h...
error: drivers/net/mlx5/mlx5_rx.h: does not match index
Checking patch drivers/net/mlx5/mlx5_rxq.c...
error: drivers/net/mlx5/mlx5_rxq.c: does not match index
Checking patch drivers/net/mlx5/mlx5_trigger.c...
error: drivers/net/mlx5/mlx5_trigger.c: does not match index
Checking patch drivers/net/mlx5/mlx5_devx.c...
error: while searching for:
	}
	rxq->rxq_ctrl = rxq_ctrl;
	rxq_ctrl->type = MLX5_RXQ_TYPE_STANDARD;
	rxq_ctrl->priv = priv;
	rxq_ctrl->obj = rxq;
	rxq_data = &rxq_ctrl->rxq;
	/* Create CQ using DevX API. */

error: patch failed: drivers/net/mlx5/mlx5_devx.c:916
Checking patch drivers/net/mlx5/mlx5_mr.c...
Checking patch drivers/net/mlx5/mlx5_rx.c...
Checking patch drivers/net/mlx5/mlx5_rx.h...
error: drivers/net/mlx5/mlx5_rx.h: does not match index
Checking patch drivers/net/mlx5/mlx5_rxq.c...
error: drivers/net/mlx5/mlx5_rxq.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rxtx_vec.c...
Applying patch drivers/net/mlx5/mlx5_devx.c with 1 reject...
Rejected hunk #1.
Applied patch drivers/net/mlx5/mlx5_mr.c cleanly.
Applied patch drivers/net/mlx5/mlx5_rx.c cleanly.
Applied patch drivers/net/mlx5/mlx5_rxtx_vec.c cleanly.
diff a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c	(rejected hunks)
@@ -916,7 +916,7 @@ mlx5_rxq_devx_obj_drop_create(struct rte_eth_dev *dev)
 	}
 	rxq->rxq_ctrl = rxq_ctrl;
 	rxq_ctrl->type = MLX5_RXQ_TYPE_STANDARD;
-	rxq_ctrl->priv = priv;
+	rxq_ctrl->sh = priv->sh;
 	rxq_ctrl->obj = rxq;
 	rxq_data = &rxq_ctrl->rxq;
 	/* Create CQ using DevX API. */
Checking patch drivers/net/mlx5/linux/mlx5_verbs.c...
Checking patch drivers/net/mlx5/mlx5.h...
Checking patch drivers/net/mlx5/mlx5_devx.c...
error: while searching for:
/**
 * Create a RQ object using DevX.
 *
 * @param dev
 *   Pointer to Ethernet device.
 * @param rxq_data
 *   RX queue data.
 *
 * @return
 *   0 on success, a negative errno value otherwise and rte_errno is set.
 */
static int
mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev,
				  struct mlx5_rxq_data *rxq_data)
{
	struct mlx5_priv *priv = dev->data->dev_private;
	struct mlx5_rxq_ctrl *rxq_ctrl =
		container_of(rxq_data, struct mlx5_rxq_ctrl, rxq);
	struct mlx5_devx_create_rq_attr rq_attr = { 0 };
	uint16_t log_desc_n = rxq_data->elts_n - rxq_data->sges_n;
	uint32_t wqe_size, log_wqe_size;

error: patch failed: drivers/net/mlx5/mlx5_devx.c:224
Hunk #7 succeeded at 273 (offset 3 lines).
error: while searching for:
/**
 * Create a DevX CQ object for an Rx queue.
 *
 * @param dev
 *   Pointer to Ethernet device.
 * @param rxq_data
 *   RX queue data.
 *
 * @return
 *   0 on success, a negative errno value otherwise and rte_errno is set.
 */
static int
mlx5_rxq_create_devx_cq_resources(struct rte_eth_dev *dev,
				  struct mlx5_rxq_data *rxq_data)
{
	struct mlx5_devx_cq *cq_obj = 0;
	struct mlx5_devx_cq_attr cq_attr = { 0 };
	struct mlx5_priv *priv = dev->data->dev_private;
	struct mlx5_dev_ctx_shared *sh = priv->sh;
	struct mlx5_rxq_ctrl *rxq_ctrl =
		container_of(rxq_data, struct mlx5_rxq_ctrl, rxq);
	unsigned int cqe_n = mlx5_rxq_cqe_num(rxq_data);
	uint32_t log_cqe_n;
	uint16_t event_nums[1] = { 0 };

error: patch failed: drivers/net/mlx5/mlx5_devx.c:287
Hunk #9 succeeded at 339 (offset 5 lines).
Hunk #10 succeeded at 348 (offset 5 lines).
Hunk #11 succeeded at 391 (offset 5 lines).
Hunk #12 succeeded at 436 (offset 5 lines).
error: while searching for:
		tmpl->fd = mlx5_os_get_devx_channel_fd(tmpl->devx_channel);
	}
	/* Create CQ using DevX API. */
	ret = mlx5_rxq_create_devx_cq_resources(dev, rxq_data);
	if (ret) {
		DRV_LOG(ERR, "Failed to create CQ.");
		goto error;
	}
	/* Create RQ using DevX API. */
	ret = mlx5_rxq_create_devx_rq_resources(dev, rxq_data);
	if (ret) {
		DRV_LOG(ERR, "Port %u Rx queue %u RQ creation failure.",
			dev->data->port_id, idx);
		rte_errno = ENOMEM;
		goto error;
	}
	/* Change queue state to ready. */
	ret = mlx5_devx_modify_rq(tmpl, MLX5_RXQ_MOD_RST2RDY);
	if (ret)
		goto error;
	rxq_data->wqes = (void *)(uintptr_t)tmpl->rq_obj.wq.umem_buf;
	rxq_data->rq_db = (uint32_t *)(uintptr_t)tmpl->rq_obj.wq.db_rec;
	rxq_data->cq_arm_sn = 0;
	rxq_data->cq_ci = 0;
	mlx5_rxq_initialize(rxq_data);
	dev->data->rx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STARTED;
	rxq_ctrl->wqn = tmpl->rq_obj.rq->id;
	return 0;
error:
	ret = rte_errno; /* Save rte_errno before cleanup. */
	mlx5_rxq_devx_obj_release(tmpl);
	rte_errno = ret; /* Restore rte_errno. */
	return -rte_errno;
}

error: patch failed: drivers/net/mlx5/mlx5_devx.c:497
error: while searching for:
	rqt_attr->rqt_actual_size = rqt_n;
	if (queues == NULL) {
		for (i = 0; i < rqt_n; i++)
			rqt_attr->rq_list[i] = priv->drop_queue.rxq->rq->id;
		return rqt_attr;
	}
	for (i = 0; i != queues_n; ++i) {
		struct mlx5_rxq_data *rxq = (*priv->rxqs)[queues[i]];
		struct mlx5_rxq_ctrl *rxq_ctrl =
				container_of(rxq, struct mlx5_rxq_ctrl, rxq);

		rqt_attr->rq_list[i] = rxq_ctrl->obj->rq_obj.rq->id;
	}
	MLX5_ASSERT(i > 0);
	for (j = 0; i != rqt_n; ++j, ++i)

error: patch failed: drivers/net/mlx5/mlx5_devx.c:570
error: while searching for:
			}
		}
	} else {
		rxq_obj_type = priv->drop_queue.rxq->rxq_ctrl->type;
	}
	memset(tir_attr, 0, sizeof(*tir_attr));
	tir_attr->disp_type = MLX5_TIRC_DISP_TYPE_INDIRECT;

error: patch failed: drivers/net/mlx5/mlx5_devx.c:717
error: while searching for:
{
	struct mlx5_priv *priv = dev->data->dev_private;
	int socket_id = dev->device->numa_node;
	struct mlx5_rxq_ctrl *rxq_ctrl;
	struct mlx5_rxq_data *rxq_data;
	struct mlx5_rxq_obj *rxq = NULL;
	int ret;

	/*
	 * Initialize dummy control structures.
	 * They are required to hold pointers for cleanup
	 * and are only accessible via drop queue DevX objects.
	 */
	rxq_ctrl = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq_ctrl),
			       0, socket_id);
	if (rxq_ctrl == NULL) {

error: patch failed: drivers/net/mlx5/mlx5_devx.c:889
error: while searching for:
		rte_errno = ENOMEM;
		goto error;
	}
	rxq = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq), 0, socket_id);
	if (rxq == NULL) {
		DRV_LOG(ERR, "Port %u could not allocate drop queue object",
			dev->data->port_id);
		rte_errno = ENOMEM;
		goto error;
	}
	rxq->rxq_ctrl = rxq_ctrl;
	rxq_ctrl->type = MLX5_RXQ_TYPE_STANDARD;
	rxq_ctrl->sh = priv->sh;
	rxq_ctrl->obj = rxq;
	rxq_data = &rxq_ctrl->rxq;
	/* Create CQ using DevX API. */
	ret = mlx5_rxq_create_devx_cq_resources(dev, rxq_data);
	if (ret != 0) {
		DRV_LOG(ERR, "Port %u drop queue CQ creation failed.",
			dev->data->port_id);
		goto error;
	}
	/* Create RQ using DevX API. */
	ret = mlx5_rxq_create_devx_rq_resources(dev, rxq_data);
	if (ret != 0) {
		DRV_LOG(ERR, "Port %u drop queue RQ creation failed.",
			dev->data->port_id);

error: patch failed: drivers/net/mlx5/mlx5_devx.c:907
error: while searching for:
error:
	ret = rte_errno; /* Save rte_errno before cleanup. */
	if (rxq != NULL) {
		if (rxq->rq_obj.rq != NULL)
			mlx5_devx_rq_destroy(&rxq->rq_obj);
		if (rxq->cq_obj.cq != NULL)
			mlx5_devx_cq_destroy(&rxq->cq_obj);
		if (rxq->devx_channel)
			mlx5_os_devx_destroy_event_channel
							(rxq->devx_channel);
		mlx5_free(rxq);
	}
	if (rxq_ctrl != NULL)
		mlx5_free(rxq_ctrl);
	rte_errno = ret; /* Restore rte_errno. */

error: patch failed: drivers/net/mlx5/mlx5_devx.c:944
error: while searching for:
mlx5_rxq_devx_obj_drop_release(struct rte_eth_dev *dev)
{
	struct mlx5_priv *priv = dev->data->dev_private;
	struct mlx5_rxq_obj *rxq = priv->drop_queue.rxq;
	struct mlx5_rxq_ctrl *rxq_ctrl = rxq->rxq_ctrl;

	mlx5_rxq_devx_obj_release(rxq);
	mlx5_free(rxq);
	mlx5_free(rxq_ctrl);
	priv->drop_queue.rxq = NULL;
}


error: patch failed: drivers/net/mlx5/mlx5_devx.c:969
error: while searching for:
		mlx5_devx_tir_destroy(hrxq);
	if (hrxq->ind_table->ind_table != NULL)
		mlx5_devx_ind_table_destroy(hrxq->ind_table);
	if (priv->drop_queue.rxq->rq != NULL)
		mlx5_rxq_devx_obj_drop_release(dev);
}


error: patch failed: drivers/net/mlx5/mlx5_devx.c:994
Checking patch drivers/net/mlx5/mlx5_rx.h...
error: drivers/net/mlx5/mlx5_rx.h: does not match index
Checking patch drivers/net/mlx5/mlx5_rxq.c...
error: drivers/net/mlx5/mlx5_rxq.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rxtx.c...
Checking patch drivers/net/mlx5/mlx5_trigger.c...
error: drivers/net/mlx5/mlx5_trigger.c: does not match index
Checking patch drivers/net/mlx5/mlx5_vlan.c...
Applied patch drivers/net/mlx5/linux/mlx5_verbs.c cleanly.
Applied patch drivers/net/mlx5/mlx5.h cleanly.
Applying patch drivers/net/mlx5/mlx5_devx.c with 10 rejects...
Hunk #1 applied cleanly.
Hunk #2 applied cleanly.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Rejected hunk #6.
Hunk #7 applied cleanly.
Rejected hunk #8.
Hunk #9 applied cleanly.
Hunk #10 applied cleanly.
Hunk #11 applied cleanly.
Hunk #12 applied cleanly.
Rejected hunk #13.
Rejected hunk #14.
Rejected hunk #15.
Rejected hunk #16.
Rejected hunk #17.
Rejected hunk #18.
Rejected hunk #19.
Rejected hunk #20.
Applied patch drivers/net/mlx5/mlx5_rxtx.c cleanly.
Applied patch drivers/net/mlx5/mlx5_vlan.c cleanly.
diff a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c	(rejected hunks)
@@ -224,21 +218,18 @@ mlx5_rx_devx_get_event(struct mlx5_rxq_obj *rxq_obj)
 /**
  * Create a RQ object using DevX.
  *
- * @param dev
- *   Pointer to Ethernet device.
- * @param rxq_data
- *   RX queue data.
+ * @param rxq
+ *   Pointer to Rx queue.
  *
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
 static int
-mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev,
-				  struct mlx5_rxq_data *rxq_data)
+mlx5_rxq_create_devx_rq_resources(struct mlx5_rxq_priv *rxq)
 {
-	struct mlx5_priv *priv = dev->data->dev_private;
-	struct mlx5_rxq_ctrl *rxq_ctrl =
-		container_of(rxq_data, struct mlx5_rxq_ctrl, rxq);
+	struct mlx5_priv *priv = rxq->priv;
+	struct mlx5_rxq_ctrl *rxq_ctrl = rxq->ctrl;
+	struct mlx5_rxq_data *rxq_data = &rxq->ctrl->rxq;
 	struct mlx5_devx_create_rq_attr rq_attr = { 0 };
 	uint16_t log_desc_n = rxq_data->elts_n - rxq_data->sges_n;
 	uint32_t wqe_size, log_wqe_size;
@@ -287,24 +278,22 @@ mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev,
 /**
  * Create a DevX CQ object for an Rx queue.
  *
- * @param dev
- *   Pointer to Ethernet device.
- * @param rxq_data
- *   RX queue data.
+ * @param rxq
+ *   Pointer to Rx queue.
  *
  * @return
  *   0 on success, a negative errno value otherwise and rte_errno is set.
  */
 static int
-mlx5_rxq_create_devx_cq_resources(struct rte_eth_dev *dev,
-				  struct mlx5_rxq_data *rxq_data)
+mlx5_rxq_create_devx_cq_resources(struct mlx5_rxq_priv *rxq)
 {
 	struct mlx5_devx_cq *cq_obj = 0;
 	struct mlx5_devx_cq_attr cq_attr = { 0 };
-	struct mlx5_priv *priv = dev->data->dev_private;
+	struct mlx5_priv *priv = rxq->priv;
 	struct mlx5_dev_ctx_shared *sh = priv->sh;
-	struct mlx5_rxq_ctrl *rxq_ctrl =
-		container_of(rxq_data, struct mlx5_rxq_ctrl, rxq);
+	uint16_t port_id = priv->dev_data->port_id;
+	struct mlx5_rxq_ctrl *rxq_ctrl = rxq->ctrl;
+	struct mlx5_rxq_data *rxq_data = &rxq_ctrl->rxq;
 	unsigned int cqe_n = mlx5_rxq_cqe_num(rxq_data);
 	uint32_t log_cqe_n;
 	uint16_t event_nums[1] = { 0 };
@@ -497,34 +478,32 @@ mlx5_rxq_devx_obj_new(struct rte_eth_dev *dev, uint16_t idx)
 		tmpl->fd = mlx5_os_get_devx_channel_fd(tmpl->devx_channel);
 	}
 	/* Create CQ using DevX API. */
-	ret = mlx5_rxq_create_devx_cq_resources(dev, rxq_data);
+	ret = mlx5_rxq_create_devx_cq_resources(rxq);
 	if (ret) {
 		DRV_LOG(ERR, "Failed to create CQ.");
 		goto error;
 	}
 	/* Create RQ using DevX API. */
-	ret = mlx5_rxq_create_devx_rq_resources(dev, rxq_data);
+	ret = mlx5_rxq_create_devx_rq_resources(rxq);
 	if (ret) {
 		DRV_LOG(ERR, "Port %u Rx queue %u RQ creation failure.",
-			dev->data->port_id, idx);
+			priv->dev_data->port_id, rxq->idx);
 		rte_errno = ENOMEM;
 		goto error;
 	}
 	/* Change queue state to ready. */
-	ret = mlx5_devx_modify_rq(tmpl, MLX5_RXQ_MOD_RST2RDY);
+	ret = mlx5_devx_modify_rq(rxq, MLX5_RXQ_MOD_RST2RDY);
 	if (ret)
 		goto error;
-	rxq_data->wqes = (void *)(uintptr_t)tmpl->rq_obj.wq.umem_buf;
-	rxq_data->rq_db = (uint32_t *)(uintptr_t)tmpl->rq_obj.wq.db_rec;
-	rxq_data->cq_arm_sn = 0;
-	rxq_data->cq_ci = 0;
+	rxq_data->wqes = (void *)(uintptr_t)rxq->devx_rq.wq.umem_buf;
+	rxq_data->rq_db = (uint32_t *)(uintptr_t)rxq->devx_rq.wq.db_rec;
 	mlx5_rxq_initialize(rxq_data);
-	dev->data->rx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STARTED;
-	rxq_ctrl->wqn = tmpl->rq_obj.rq->id;
+	priv->dev_data->rx_queue_state[rxq->idx] = RTE_ETH_QUEUE_STATE_STARTED;
+	rxq_ctrl->wqn = rxq->devx_rq.rq->id;
 	return 0;
 error:
 	ret = rte_errno; /* Save rte_errno before cleanup. */
-	mlx5_rxq_devx_obj_release(tmpl);
+	mlx5_rxq_devx_obj_release(rxq);
 	rte_errno = ret; /* Restore rte_errno. */
 	return -rte_errno;
 }
@@ -570,15 +549,15 @@ mlx5_devx_ind_table_create_rqt_attr(struct rte_eth_dev *dev,
 	rqt_attr->rqt_actual_size = rqt_n;
 	if (queues == NULL) {
 		for (i = 0; i < rqt_n; i++)
-			rqt_attr->rq_list[i] = priv->drop_queue.rxq->rq->id;
+			rqt_attr->rq_list[i] =
+					priv->drop_queue.rxq->devx_rq.rq->id;
 		return rqt_attr;
 	}
 	for (i = 0; i != queues_n; ++i) {
-		struct mlx5_rxq_data *rxq = (*priv->rxqs)[queues[i]];
-		struct mlx5_rxq_ctrl *rxq_ctrl =
-				container_of(rxq, struct mlx5_rxq_ctrl, rxq);
+		struct mlx5_rxq_priv *rxq = mlx5_rxq_get(dev, queues[i]);
 
-		rqt_attr->rq_list[i] = rxq_ctrl->obj->rq_obj.rq->id;
+		MLX5_ASSERT(rxq != NULL);
+		rqt_attr->rq_list[i] = rxq->devx_rq.rq->id;
 	}
 	MLX5_ASSERT(i > 0);
 	for (j = 0; i != rqt_n; ++j, ++i)
@@ -717,7 +696,7 @@ mlx5_devx_tir_attr_set(struct rte_eth_dev *dev, const uint8_t *rss_key,
 			}
 		}
 	} else {
-		rxq_obj_type = priv->drop_queue.rxq->rxq_ctrl->type;
+		rxq_obj_type = priv->drop_queue.rxq->ctrl->type;
 	}
 	memset(tir_attr, 0, sizeof(*tir_attr));
 	tir_attr->disp_type = MLX5_TIRC_DISP_TYPE_INDIRECT;
@@ -889,16 +868,23 @@ mlx5_rxq_devx_obj_drop_create(struct rte_eth_dev *dev)
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
 	int socket_id = dev->device->numa_node;
-	struct mlx5_rxq_ctrl *rxq_ctrl;
-	struct mlx5_rxq_data *rxq_data;
-	struct mlx5_rxq_obj *rxq = NULL;
+	struct mlx5_rxq_priv *rxq;
+	struct mlx5_rxq_ctrl *rxq_ctrl = NULL;
+	struct mlx5_rxq_obj *rxq_obj = NULL;
 	int ret;
 
 	/*
-	 * Initialize dummy control structures.
+	 * Initialize dummy Rx queue structures.
 	 * They are required to hold pointers for cleanup
 	 * and are only accessible via drop queue DevX objects.
 	 */
+	rxq = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq), 0, socket_id);
+	if (rxq == NULL) {
+		DRV_LOG(ERR, "Port %u could not allocate drop queue",
+			dev->data->port_id);
+		rte_errno = ENOMEM;
+		goto error;
+	}
 	rxq_ctrl = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq_ctrl),
 			       0, socket_id);
 	if (rxq_ctrl == NULL) {
@@ -907,27 +893,29 @@ mlx5_rxq_devx_obj_drop_create(struct rte_eth_dev *dev)
 		rte_errno = ENOMEM;
 		goto error;
 	}
-	rxq = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq), 0, socket_id);
-	if (rxq == NULL) {
+	rxq_obj = mlx5_malloc(MLX5_MEM_ZERO, sizeof(*rxq_obj), 0, socket_id);
+	if (rxq_obj == NULL) {
 		DRV_LOG(ERR, "Port %u could not allocate drop queue object",
 			dev->data->port_id);
 		rte_errno = ENOMEM;
 		goto error;
 	}
-	rxq->rxq_ctrl = rxq_ctrl;
+	rxq->priv = priv;
+	rxq->ctrl = rxq_ctrl;
+	LIST_INSERT_HEAD(&rxq_ctrl->owners, rxq, owner_entry);
+	rxq_obj->rxq_ctrl = rxq_ctrl;
 	rxq_ctrl->type = MLX5_RXQ_TYPE_STANDARD;
 	rxq_ctrl->sh = priv->sh;
-	rxq_ctrl->obj = rxq;
-	rxq_data = &rxq_ctrl->rxq;
+	rxq_ctrl->obj = rxq_obj;
 	/* Create CQ using DevX API. */
-	ret = mlx5_rxq_create_devx_cq_resources(dev, rxq_data);
+	ret = mlx5_rxq_create_devx_cq_resources(rxq);
 	if (ret != 0) {
 		DRV_LOG(ERR, "Port %u drop queue CQ creation failed.",
 			dev->data->port_id);
 		goto error;
 	}
 	/* Create RQ using DevX API. */
-	ret = mlx5_rxq_create_devx_rq_resources(dev, rxq_data);
+	ret = mlx5_rxq_create_devx_rq_resources(rxq);
 	if (ret != 0) {
 		DRV_LOG(ERR, "Port %u drop queue RQ creation failed.",
 			dev->data->port_id);
@@ -944,15 +932,18 @@ mlx5_rxq_devx_obj_drop_create(struct rte_eth_dev *dev)
 error:
 	ret = rte_errno; /* Save rte_errno before cleanup. */
 	if (rxq != NULL) {
-		if (rxq->rq_obj.rq != NULL)
-			mlx5_devx_rq_destroy(&rxq->rq_obj);
-		if (rxq->cq_obj.cq != NULL)
-			mlx5_devx_cq_destroy(&rxq->cq_obj);
-		if (rxq->devx_channel)
-			mlx5_os_devx_destroy_event_channel
-							(rxq->devx_channel);
+		if (rxq->devx_rq.rq != NULL)
+			mlx5_devx_rq_destroy(&rxq->devx_rq);
 		mlx5_free(rxq);
 	}
+	if (rxq_obj != NULL) {
+		if (rxq_obj->cq_obj.cq != NULL)
+			mlx5_devx_cq_destroy(&rxq_obj->cq_obj);
+		if (rxq_obj->devx_channel)
+			mlx5_os_devx_destroy_event_channel
+							(rxq_obj->devx_channel);
+		mlx5_free(rxq_obj);
+	}
 	if (rxq_ctrl != NULL)
 		mlx5_free(rxq_ctrl);
 	rte_errno = ret; /* Restore rte_errno. */
@@ -969,12 +960,14 @@ static void
 mlx5_rxq_devx_obj_drop_release(struct rte_eth_dev *dev)
 {
 	struct mlx5_priv *priv = dev->data->dev_private;
-	struct mlx5_rxq_obj *rxq = priv->drop_queue.rxq;
-	struct mlx5_rxq_ctrl *rxq_ctrl = rxq->rxq_ctrl;
+	struct mlx5_rxq_priv *rxq = priv->drop_queue.rxq;
+	struct mlx5_rxq_ctrl *rxq_ctrl = rxq->ctrl;
+	struct mlx5_rxq_obj *rxq_obj = rxq_ctrl->obj;
 
 	mlx5_rxq_devx_obj_release(rxq);
 	mlx5_free(rxq);
 	mlx5_free(rxq_ctrl);
+	mlx5_free(rxq_obj);
 	priv->drop_queue.rxq = NULL;
 }
 
@@ -994,7 +987,7 @@ mlx5_devx_drop_action_destroy(struct rte_eth_dev *dev)
 		mlx5_devx_tir_destroy(hrxq);
 	if (hrxq->ind_table->ind_table != NULL)
 		mlx5_devx_ind_table_destroy(hrxq->ind_table);
-	if (priv->drop_queue.rxq->rq != NULL)
+	if (priv->drop_queue.rxq != NULL)
 		mlx5_rxq_devx_obj_drop_release(dev);
 }
 
Checking patch drivers/net/mlx5/linux/mlx5_verbs.c...
error: drivers/net/mlx5/linux/mlx5_verbs.c: does not match index
Checking patch drivers/net/mlx5/mlx5.c...
Checking patch drivers/net/mlx5/mlx5.h...
error: drivers/net/mlx5/mlx5.h: does not match index
Checking patch drivers/net/mlx5/mlx5_devx.c...
error: drivers/net/mlx5/mlx5_devx.c: does not match index
Checking patch drivers/net/mlx5/mlx5_ethdev.c...
Checking patch drivers/net/mlx5/mlx5_flow.c...
error: while searching for:
 *   0 on success, a negative errno code on error.
 */
static int
mlx5_validate_rss_queues(const struct rte_eth_dev *dev,
			 const uint16_t *queues, uint32_t queues_n,
			 const char **error, uint32_t *queue_idx)
{

error: patch failed: drivers/net/mlx5/mlx5_flow.c:1578
error: while searching for:
			*queue_idx = i;
			return -EINVAL;
		}
		if (!(*priv->rxqs)[queues[i]]) {
			*error =  "queue is not configured";
			*queue_idx = i;
			return -EINVAL;
		}
		rxq_ctrl = container_of((*priv->rxqs)[queues[i]],
					struct mlx5_rxq_ctrl, rxq);
		if (i == 0)
			rxq_type = rxq_ctrl->type;
		if (rxq_type != rxq_ctrl->type) {

error: patch failed: drivers/net/mlx5/mlx5_flow.c:1594
Checking patch drivers/net/mlx5/mlx5_rss.c...
Checking patch drivers/net/mlx5/mlx5_rx.c...
error: drivers/net/mlx5/mlx5_rx.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rx.h...
error: drivers/net/mlx5/mlx5_rx.h: does not match index
Checking patch drivers/net/mlx5/mlx5_rxq.c...
error: drivers/net/mlx5/mlx5_rxq.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rxtx_vec.c...
error: drivers/net/mlx5/mlx5_rxtx_vec.c: does not match index
Checking patch drivers/net/mlx5/mlx5_stats.c...
Checking patch drivers/net/mlx5/mlx5_trigger.c...
error: drivers/net/mlx5/mlx5_trigger.c: does not match index
Applied patch drivers/net/mlx5/mlx5.c cleanly.
Applied patch drivers/net/mlx5/mlx5_ethdev.c cleanly.
Applying patch drivers/net/mlx5/mlx5_flow.c with 2 rejects...
Hunk #1 applied cleanly.
Hunk #2 applied cleanly.
Hunk #3 applied cleanly.
Hunk #4 applied cleanly.
Hunk #5 applied cleanly.
Rejected hunk #6.
Rejected hunk #7.
Applied patch drivers/net/mlx5/mlx5_rss.c cleanly.
Applied patch drivers/net/mlx5/mlx5_stats.c cleanly.
diff a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c	(rejected hunks)
@@ -1578,7 +1580,7 @@ mlx5_flow_validate_action_queue(const struct rte_flow_action *action,
  *   0 on success, a negative errno code on error.
  */
 static int
-mlx5_validate_rss_queues(const struct rte_eth_dev *dev,
+mlx5_validate_rss_queues(struct rte_eth_dev *dev,
 			 const uint16_t *queues, uint32_t queues_n,
 			 const char **error, uint32_t *queue_idx)
 {
@@ -1594,13 +1596,12 @@ mlx5_validate_rss_queues(const struct rte_eth_dev *dev,
 			*queue_idx = i;
 			return -EINVAL;
 		}
-		if (!(*priv->rxqs)[queues[i]]) {
+		rxq_ctrl = mlx5_rxq_ctrl_get(dev, queues[i]);
+		if (rxq_ctrl == NULL) {
 			*error =  "queue is not configured";
 			*queue_idx = i;
 			return -EINVAL;
 		}
-		rxq_ctrl = container_of((*priv->rxqs)[queues[i]],
-					struct mlx5_rxq_ctrl, rxq);
 		if (i == 0)
 			rxq_type = rxq_ctrl->type;
 		if (rxq_type != rxq_ctrl->type) {
Checking patch doc/guides/nics/features/mlx5.ini...
Checking patch doc/guides/nics/mlx5.rst...
Checking patch drivers/net/mlx5/linux/mlx5_os.c...
Checking patch drivers/net/mlx5/linux/mlx5_verbs.c...
error: drivers/net/mlx5/linux/mlx5_verbs.c: does not match index
Checking patch drivers/net/mlx5/mlx5.h...
error: drivers/net/mlx5/mlx5.h: does not match index
Checking patch drivers/net/mlx5/mlx5_devx.c...
error: drivers/net/mlx5/mlx5_devx.c: does not match index
Checking patch drivers/net/mlx5/mlx5_ethdev.c...
error: drivers/net/mlx5/mlx5_ethdev.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rx.h...
error: drivers/net/mlx5/mlx5_rx.h: does not match index
Checking patch drivers/net/mlx5/mlx5_rxq.c...
error: drivers/net/mlx5/mlx5_rxq.c: does not match index
Checking patch drivers/net/mlx5/mlx5_trigger.c...
error: drivers/net/mlx5/mlx5_trigger.c: does not match index
Applied patch doc/guides/nics/features/mlx5.ini cleanly.
Applied patch doc/guides/nics/mlx5.rst cleanly.
Applied patch drivers/net/mlx5/linux/mlx5_os.c cleanly.
Checking patch drivers/net/mlx5/mlx5_devx.c...
error: drivers/net/mlx5/mlx5_devx.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rx.c...
error: drivers/net/mlx5/mlx5_rx.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rxq.c...
error: drivers/net/mlx5/mlx5_rxq.c: does not match index
Checking patch drivers/net/mlx5/mlx5_rxtx_vec_altivec.h...
Checking patch drivers/net/mlx5/mlx5_rxtx_vec_neon.h...
Checking patch drivers/net/mlx5/mlx5_rxtx_vec_sse.h...
Applied patch drivers/net/mlx5/mlx5_rxtx_vec_altivec.h cleanly.
Applied patch drivers/net/mlx5/mlx5_rxtx_vec_neon.h cleanly.
Applied patch drivers/net/mlx5/mlx5_rxtx_vec_sse.h cleanly.

https://lab.dpdk.org/results/dashboard/patchsets/19471/

UNH-IOL DPDK Community Lab


More information about the test-report mailing list