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 61291A0524; Mon, 27 Jul 2020 10:08:25 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id A6A631BFF3; Mon, 27 Jul 2020 10:08:23 +0200 (CEST) Received: from mellanox.co.il (mail-il-dmz.mellanox.com [193.47.165.129]) by dpdk.org (Postfix) with ESMTP id 1F1FF2C01 for ; Mon, 27 Jul 2020 10:08:22 +0200 (CEST) Received: from Internal Mail-Server by MTLPINE1 (envelope-from matan@mellanox.com) with SMTP; 27 Jul 2020 11:08:17 +0300 Received: from pegasus25.mtr.labs.mlnx. (pegasus25.mtr.labs.mlnx [10.210.16.10]) by labmailer.mlnx (8.13.8/8.13.8) with ESMTP id 06R88HY8001778; Mon, 27 Jul 2020 11:08:17 +0300 From: Matan Azrad To: Maxime Coquelin Cc: dev@dpdk.org, stable@dpdk.org, Xueming Li Date: Mon, 27 Jul 2020 08:07:59 +0000 Message-Id: <1595837279-112146-1-git-send-email-matan@mellanox.com> X-Mailer: git-send-email 1.8.3.1 Subject: [dpdk-dev] [PATCH] vdpa/mlx5: fix steering update in virtq unset X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" When a virtq is destroyed by the driver, it must be removed from the steering RQT which holds its reference. The driver didn't remove the virtq from RQT before destroying it what caused HW syndrome in virtq unset. Remove the virtq from RQT before destroying it. Fixes: 9f09b1ca15c5 ("vdpa/mlx5: recreate a virtq becoming enabled") Cc: stable@dpdk.org Signed-off-by: Xueming Li Signed-off-by: Matan Azrad --- drivers/vdpa/mlx5/mlx5_vdpa_virtq.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c index 3e61264..19554f6 100644 --- a/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c +++ b/drivers/vdpa/mlx5/mlx5_vdpa_virtq.c @@ -482,6 +482,13 @@ DRV_LOG(INFO, "Virtq %d was modified, recreate it.", index); } if (virtq->virtq) { + virtq->enable = 0; + if (is_virtq_recvq(virtq->index, priv->nr_virtqs)) { + ret = mlx5_vdpa_steer_update(priv); + if (ret) + DRV_LOG(WARNING, "Failed to disable steering " + "for virtq %d.", index); + } ret = mlx5_vdpa_virtq_stop(priv, index); if (ret) DRV_LOG(WARNING, "Failed to stop virtq %d.", index); @@ -493,14 +500,12 @@ DRV_LOG(ERR, "Failed to setup virtq %d.", index); return ret; } - } - virtq->enable = !!enable; - if (is_virtq_recvq(virtq->index, priv->nr_virtqs)) { - /* Need to add received virtq to the RQT table of the TIRs. */ - ret = mlx5_vdpa_steer_update(priv); - if (ret) { - virtq->enable = !enable; - return ret; + virtq->enable = 1; + if (is_virtq_recvq(virtq->index, priv->nr_virtqs)) { + ret = mlx5_vdpa_steer_update(priv); + if (ret) + DRV_LOG(WARNING, "Failed to enable steering " + "for virtq %d.", index); } } return 0; -- 1.8.3.1