From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 92689A0521 for ; Tue, 3 Nov 2020 07:48:39 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 8A829BE63; Tue, 3 Nov 2020 07:48:38 +0100 (CET) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id F2FE9BE63 for ; Tue, 3 Nov 2020 07:48:35 +0100 (CET) Received: from Internal Mail-Server by MTLPINE1 (envelope-from matan@nvidia.com) with SMTP; 3 Nov 2020 08:48:35 +0200 Received: from nvidia.com (pegasus25.mtr.labs.mlnx [10.210.16.10]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 0A36mZKv008180; Tue, 3 Nov 2020 08:48:35 +0200 From: Matan Azrad To: Viacheslav Ovsiienko Cc: dev@dpdk.org, stable@dpdk.org Date: Tue, 3 Nov 2020 06:48:32 +0000 Message-Id: <1604386112-342335-1-git-send-email-matan@nvidia.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dpdk-stable] [PATCH] net/mlx5: fix Tx queue stop state X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" The Tx queue stop API doesn't call the PMD callback when the state of the queue is stopped. The drivers should update the state to be stopped when the queue stop callback is done successfully or when the port is stopped. The drivers should update the state to be started when the queue start callback is done successfully or when the port is started. The driver wrongly didn't update the state to be started when the port start callback was done what remained the state as stopped. Following call to a queue stop API was not completed by ethdev layer because the state is already stopped. Move the state update from the Tx queue setup to the port start callback. Fixes: 161d103b231c ("net/mlx5: add queue start and stop") Cc: stable@dpdk.org Signed-off-by: Matan Azrad --- drivers/net/mlx5/linux/mlx5_verbs.c | 1 + drivers/net/mlx5/mlx5_devx.c | 1 + drivers/net/mlx5/mlx5_rxq.c | 4 +++- drivers/net/mlx5/mlx5_trigger.c | 1 + drivers/net/mlx5/mlx5_txq.c | 3 +-- 5 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/net/mlx5/linux/mlx5_verbs.c b/drivers/net/mlx5/linux/mlx5_verbs.c index 494ddba..540ce32 100644 --- a/drivers/net/mlx5/linux/mlx5_verbs.c +++ b/drivers/net/mlx5/linux/mlx5_verbs.c @@ -1038,6 +1038,7 @@ goto error; } txq_uar_init(txq_ctrl); + dev->data->tx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STARTED; priv->verbs_alloc_ctx.type = MLX5_VERBS_ALLOC_TYPE_NONE; return 0; error: diff --git a/drivers/net/mlx5/mlx5_devx.c b/drivers/net/mlx5/mlx5_devx.c index b3acbc2..2888977 100644 --- a/drivers/net/mlx5/mlx5_devx.c +++ b/drivers/net/mlx5/mlx5_devx.c @@ -1427,6 +1427,7 @@ txq_ctrl->uar_mmap_offset = mlx5_os_get_devx_uar_mmap_offset(sh->tx_uar); txq_uar_init(txq_ctrl); + dev->data->tx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STARTED; return 0; error: ret = rte_errno; /* Save rte_errno before cleanup. */ diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index a733eda..88c0151 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -1773,8 +1773,10 @@ struct mlx5_rxq_ctrl * mlx5_free(rxq_ctrl->obj); rxq_ctrl->obj = NULL; } - if (rxq_ctrl->type == MLX5_RXQ_TYPE_STANDARD) + if (rxq_ctrl->type == MLX5_RXQ_TYPE_STANDARD) { rxq_free_elts(rxq_ctrl); + dev->data->rx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STOPPED; + } if (!__atomic_load_n(&rxq_ctrl->refcnt, __ATOMIC_RELAXED)) { if (rxq_ctrl->type == MLX5_RXQ_TYPE_STANDARD) mlx5_mr_btree_free(&rxq_ctrl->rxq.mr_ctrl.cache_bh); diff --git a/drivers/net/mlx5/mlx5_trigger.c b/drivers/net/mlx5/mlx5_trigger.c index 52691b6..4b6e17e 100644 --- a/drivers/net/mlx5/mlx5_trigger.c +++ b/drivers/net/mlx5/mlx5_trigger.c @@ -77,6 +77,7 @@ } if (txq_ctrl->type == MLX5_TXQ_TYPE_STANDARD) { size_t size = txq_data->cqe_s * sizeof(*txq_data->fcqs); + txq_data->fcqs = mlx5_malloc(flags, size, RTE_CACHE_LINE_SIZE, txq_ctrl->socket); diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index e1291f0..6390cd0 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -388,7 +388,6 @@ DRV_LOG(DEBUG, "port %u adding Tx queue %u to list", dev->data->port_id, idx); (*priv->txqs)[idx] = &txq_ctrl->txq; - dev->data->tx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STARTED; return 0; } @@ -1249,8 +1248,8 @@ struct mlx5_txq_ctrl * txq_ctrl->txq.fcqs = NULL; } txq_free_elts(txq_ctrl); + dev->data->tx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STOPPED; } - dev->data->tx_queue_state[idx] = RTE_ETH_QUEUE_STATE_STOPPED; if (!__atomic_load_n(&txq_ctrl->refcnt, __ATOMIC_RELAXED)) { if (txq_ctrl->type == MLX5_TXQ_TYPE_STANDARD) mlx5_mr_btree_free(&txq_ctrl->txq.mr_ctrl.cache_bh); -- 1.8.3.1