[dpdk-test-report] |WARNING| pw103749-103761 [PATCH] [v4, 14/14] net/mlx5: add shared Rx queue port datapath support

dpdklab at iol.unh.edu dpdklab at iol.unh.edu
Thu Nov 4 13:49:03 CET 2021


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

_apply patch failure_

Submitter: Xueming Li <xuemingl at nvidia.com>
Date: Thursday, November 04 2021 12:33:20 
Applied on: CommitID:5b08ac4e4a8dbc95f52b871b62a97fda57fa477e
Apply patch set 103749-103761 failed:

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:918
Checking patch drivers/net/mlx5/mlx5_rx.c...
Checking patch drivers/net/mlx5/mlx5_rx.h...
Hunk #3 succeeded at 317 (offset -4 lines).
Checking patch drivers/net/mlx5/mlx5_rxq.c...
Checking patch drivers/net/mlx5/mlx5_rxtx_vec.c...
Checking patch drivers/net/mlx5/mlx5_trigger.c...
Hunk #1 succeeded at 130 (offset -1 lines).
Hunk #2 succeeded at 149 (offset -1 lines).
Hunk #3 succeeded at 213 (offset -1 lines).
Applying patch drivers/net/mlx5/mlx5_devx.c with 1 reject...
Rejected hunk #1.
Applied patch drivers/net/mlx5/mlx5_rx.c cleanly.
Applied patch drivers/net/mlx5/mlx5_rx.h cleanly.
Applied patch drivers/net/mlx5/mlx5_rxq.c cleanly.
Applied patch drivers/net/mlx5/mlx5_rxtx_vec.c cleanly.
Applied patch drivers/net/mlx5/mlx5_trigger.c cleanly.
diff a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c	(rejected hunks)
@@ -918,7 +918,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...
Hunk #1 succeeded at 297 (offset -3 lines).
Hunk #2 succeeded at 1234 (offset -33 lines).
Hunk #3 succeeded at 1315 (offset -33 lines).
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_common_device *cdev = priv->sh->cdev;
	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
error: while searching for:
	rq_attr.wq_attr.pd = cdev->pdn;
	rq_attr.counter_set_id = priv->counter_set_id;
	/* Create RQ using DevX API. */
	return mlx5_devx_rq_create(cdev->ctx, &rxq_ctrl->obj->rq_obj, wqe_size,
				   log_desc_n, &rq_attr, rxq_ctrl->socket);
}

/**
 * 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:281
Hunk #8 succeeded at 340 (offset 5 lines).
Hunk #9 succeeded at 349 (offset 5 lines).
Hunk #10 succeeded at 392 (offset 5 lines).
Hunk #11 succeeded at 437 (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:498
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:571
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:719
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;

	/*

error: patch failed: drivers/net/mlx5/mlx5_devx.c:891
error: while searching for:
	 * 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:901
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:909
error: while searching for:
	return 0;
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. */
	return -rte_errno;
}

error: patch failed: drivers/net/mlx5/mlx5_devx.c:945
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:971
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:996
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 11 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.
Hunk #8 applied cleanly.
Hunk #9 applied cleanly.
Hunk #10 applied cleanly.
Hunk #11 applied cleanly.
Rejected hunk #12.
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,22 +218,19 @@ 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_priv *priv = rxq->priv;
 	struct mlx5_common_device *cdev = priv->sh->cdev;
-	struct mlx5_rxq_ctrl *rxq_ctrl =
-		container_of(rxq_data, struct mlx5_rxq_ctrl, rxq);
+	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;
@@ -281,31 +272,29 @@ mlx5_rxq_create_devx_rq_resources(struct rte_eth_dev *dev,
 	rq_attr.wq_attr.pd = cdev->pdn;
 	rq_attr.counter_set_id = priv->counter_set_id;
 	/* Create RQ using DevX API. */
-	return mlx5_devx_rq_create(cdev->ctx, &rxq_ctrl->obj->rq_obj, wqe_size,
+	return mlx5_devx_rq_create(cdev->ctx, &rxq->devx_rq, wqe_size,
 				   log_desc_n, &rq_attr, rxq_ctrl->socket);
 }
 
 /**
  * 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 };
@@ -498,34 +479,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;
 }
@@ -571,15 +550,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)
@@ -719,7 +698,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;
@@ -891,9 +870,9 @@ 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;
 
 	/*
@@ -901,6 +880,13 @@ mlx5_rxq_devx_obj_drop_create(struct rte_eth_dev *dev)
 	 * 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 private",
+			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) {
@@ -909,27 +895,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_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;
+	rxq->ctrl = rxq_ctrl;
+	rxq->priv = priv;
+	LIST_INSERT_HEAD(&rxq_ctrl->owners, rxq, owner_entry);
 	/* 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);
@@ -945,18 +933,20 @@ mlx5_rxq_devx_obj_drop_create(struct rte_eth_dev *dev)
 	return 0;
 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)
+	if (rxq != NULL && rxq->devx_rq.rq != NULL)
+		mlx5_devx_rq_destroy(&rxq->devx_rq);
+	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->devx_channel);
-		mlx5_free(rxq);
+							(rxq_obj->devx_channel);
+		mlx5_free(rxq_obj);
 	}
 	if (rxq_ctrl != NULL)
 		mlx5_free(rxq_ctrl);
+	if (rxq != NULL)
+		mlx5_free(rxq);
 	rte_errno = ret; /* Restore rte_errno. */
 	return -rte_errno;
 }
@@ -971,12 +961,13 @@ 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;
 
 	mlx5_rxq_devx_obj_release(rxq);
-	mlx5_free(rxq);
+	mlx5_free(rxq_ctrl->obj);
 	mlx5_free(rxq_ctrl);
+	mlx5_free(rxq);
 	priv->drop_queue.rxq = NULL;
 }
 
@@ -996,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->devx_rq.rq != 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...
error: while searching for:
	/* Free the eCPRI flex parser resource. */
	mlx5_flex_parser_ecpri_release(dev);
	mlx5_flex_item_port_cleanup(dev);
	if (priv->rxqs != NULL) {
		/* XXX race condition if mlx5_rx_burst() is still running. */
		rte_delay_us_sleep(1000);
		for (i = 0; (i != priv->rxqs_n); ++i)
			mlx5_rxq_release(dev, i);
		priv->rxqs_n = 0;
		priv->rxqs = NULL;
	}
	if (priv->representor) {
		/* Each representor has a dedicated interrupts handler */
		mlx5_free(dev->intr_handle);
		dev->intr_handle = NULL;
	}
	if (priv->rxq_privs != NULL) {
		mlx5_free(priv->rxq_privs);
		priv->rxq_privs = NULL;
	}

error: patch failed: drivers/net/mlx5/mlx5.c:1687
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...
Hunk #1 succeeded at 1194 (offset -16 lines).
Hunk #2 succeeded at 1290 (offset -16 lines).
Hunk #3 succeeded at 1355 (offset -16 lines).
Hunk #4 succeeded at 1378 (offset -16 lines).
Hunk #5 succeeded at 1577 (offset -16 lines).
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:1622
error: while searching for:
	uint32_t i;

	for (i = 0; i != queues_n; ++i) {
		struct mlx5_rxq_ctrl *rxq_ctrl;

		if (queues[i] >= priv->rxqs_n) {
			*error = "queue index out of range";
			*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:1631
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
Applying patch drivers/net/mlx5/mlx5.c with 1 reject...
Rejected hunk #1.
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.c b/drivers/net/mlx5/mlx5.c	(rejected hunks)
@@ -1687,20 +1687,12 @@ mlx5_dev_close(struct rte_eth_dev *dev)
 	/* Free the eCPRI flex parser resource. */
 	mlx5_flex_parser_ecpri_release(dev);
 	mlx5_flex_item_port_cleanup(dev);
-	if (priv->rxqs != NULL) {
+	if (priv->rxq_privs != NULL) {
 		/* XXX race condition if mlx5_rx_burst() is still running. */
 		rte_delay_us_sleep(1000);
 		for (i = 0; (i != priv->rxqs_n); ++i)
 			mlx5_rxq_release(dev, i);
 		priv->rxqs_n = 0;
-		priv->rxqs = NULL;
-	}
-	if (priv->representor) {
-		/* Each representor has a dedicated interrupts handler */
-		mlx5_free(dev->intr_handle);
-		dev->intr_handle = NULL;
-	}
-	if (priv->rxq_privs != NULL) {
 		mlx5_free(priv->rxq_privs);
 		priv->rxq_privs = NULL;
 	}
diff a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c	(rejected hunks)
@@ -1622,7 +1624,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)
 {
@@ -1631,20 +1633,19 @@ mlx5_validate_rss_queues(const struct rte_eth_dev *dev,
 	uint32_t i;
 
 	for (i = 0; i != queues_n; ++i) {
-		struct mlx5_rxq_ctrl *rxq_ctrl;
+		struct mlx5_rxq_ctrl *rxq_ctrl = mlx5_rxq_ctrl_get(dev,
+								   queues[i]);
 
 		if (queues[i] >= priv->rxqs_n) {
 			*error = "queue index out of range";
 			*queue_idx = i;
 			return -EINVAL;
 		}
-		if (!(*priv->rxqs)[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...
Hunk #2 succeeded at 465 (offset -1 lines).
Checking patch drivers/net/mlx5/linux/mlx5_os.c...
Hunk #1 succeeded at 410 (offset -10 lines).
Hunk #2 succeeded at 485 (offset -10 lines).
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/20006/

UNH-IOL DPDK Community Lab


More information about the test-report mailing list