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 4AAACA04DB for ; Tue, 17 Nov 2020 12:15:17 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 42387F3E; Tue, 17 Nov 2020 12:15:16 +0100 (CET) Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) by dpdk.org (Postfix) with ESMTP id 29693F3E for ; Tue, 17 Nov 2020 12:15:15 +0100 (CET) Received: by mail-wm1-f46.google.com with SMTP id 19so2860441wmf.1 for ; Tue, 17 Nov 2020 03:15:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=x1gVOksX4IX7F2D4wlsjeLsM0D9LL0bCjzlgmyWKG8M=; b=lQ8aBKpXVjkAKzMLF+Zy5/vBVuKo8PYr+AMdWL8ch8WNIz5u8yZDLpT8xWesh1C2ZU X6HSGme2JDKlAWmmlBPAXgZGn7pARkpRZbZqaiSPMbO0IeFwPXLqjY4WjWtpUwuF0X1l DunVVR54KRWW/lLFjFuMYegV6GBBWMM2lkiOBE/ffP4ZxWTkEUt3RmFBwtR1m6kWPAx8 24s6WYy9xYdhkRpOE5kFJw8yFBghJy/ZlSM6VlgZs9Ab7N/jSuSDxB4YtnAN+XsH+4Hu 9VsCwxwYO07kFmnyBlI91Yvca818Gl4fW29we//LTPbFK/KalvDiu0THdQ+w3SOOi1nP kt/g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x1gVOksX4IX7F2D4wlsjeLsM0D9LL0bCjzlgmyWKG8M=; b=aykd0lAYB45LKPyVWyBBn+3wnoDEJCevtiXR+o89ZaPojpLU/gU0DRZtcGlHcNIyyu O4XG+76UZlVr+N/Jksiy5QNwNB6g8v2EdIJGv6Sqvd2kqMkYP6mHHuW19ihFC2+ZosOM XGRpKeiD4TULOqkvPZOrTbU2Bf+ghYHtDN8vy5bFfkkD5855ZFD6z4PpuxjILOhoLqGR lYN2nY+H5hPNkiQ87B9c2r04NLT4zDw9lq5iHSl8LVtHEpcysl2Xn3mrkmkpdQ4/RYMk v00UjZKxwXQ3abZZ105u66b1wHd4QkTqVFXORC3SMcesKwpXPpzYNMrahiDqc/s27F29 xvrA== X-Gm-Message-State: AOAM530RWldx4h8u0kztT6AXYiuVm9XANO0phXXxAn6Jl/zQ440OhBvI QFiSv3r44qD8nSyOLNCaXdo= X-Google-Smtp-Source: ABdhPJzeROfv3idJBgRu29KYN+YwUwseMRM9MARlHJ7g+t7zpOpTBRzQsHIGKYLY3fFgVPBolEYiRA== X-Received: by 2002:a7b:c925:: with SMTP id h5mr3730829wml.5.1605611713943; Tue, 17 Nov 2020 03:15:13 -0800 (PST) Received: from localhost ([88.98.246.218]) by smtp.gmail.com with ESMTPSA id v20sm1044431wmh.44.2020.11.17.03.15.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Nov 2020 03:15:13 -0800 (PST) From: luca.boccassi@gmail.com To: Viacheslav Ovsiienko Cc: Matan Azrad , dpdk stable Date: Tue, 17 Nov 2020 11:13:50 +0000 Message-Id: <20201117111416.1961049-16-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201117111416.1961049-1-luca.boccassi@gmail.com> References: <20201109185030.3478760-2-luca.boccassi@gmail.com> <20201117111416.1961049-1-luca.boccassi@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/mlx5: fix Rx queue completion index consistency' has been queued to stable release 19.11.6 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" Hi, FYI, your patch has been queued to stable release 19.11.6 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 11/19/20. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/c8b25df21ec9ed4c79ca43a85a851a15184cc989 Thanks. Luca Boccassi --- >From c8b25df21ec9ed4c79ca43a85a851a15184cc989 Mon Sep 17 00:00:00 2001 From: Viacheslav Ovsiienko Date: Fri, 6 Nov 2020 17:16:10 +0000 Subject: [PATCH] net/mlx5: fix Rx queue completion index consistency [ upstream commit 70d83ebbbb2554bcab78bfe7f5b102635278bc76 ] The Rx queue completion consumer index got temporary wrong value pointing to the midst of the compressed CQE session. If application crashed at the moment the next queue restart caused handling wrong CQEs pointed by index and losing consuming index synchronization, that made reliable queue restart impossible. Fixes: 88c0733535d6 ("net/mlx5: extend Rx completion with error handling") Signed-off-by: Viacheslav Ovsiienko Acked-by: Matan Azrad --- drivers/net/mlx5/mlx5_rxtx.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index fb4fe94235..9f4a04122c 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -1125,6 +1125,7 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, } else { int ret; int8_t op_own; + uint32_t cq_ci; ret = check_cqe(cqe, cqe_n, rxq->cq_ci); if (unlikely(ret != MLX5_CQE_STATUS_SW_OWN)) { @@ -1138,14 +1139,19 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, return 0; } } - ++rxq->cq_ci; + /* + * Introduce the local variable to have queue cq_ci + * index in queue structure always consistent with + * actual CQE boundary (not pointing to the middle + * of compressed CQE session). + */ + cq_ci = rxq->cq_ci + 1; op_own = cqe->op_own; if (MLX5_CQE_FORMAT(op_own) == MLX5_COMPRESSED) { volatile struct mlx5_mini_cqe8 (*mc)[8] = (volatile struct mlx5_mini_cqe8 (*)[8]) (uintptr_t)(&(*rxq->cqes) - [rxq->cq_ci & - cqe_cnt].pkt_info); + [cq_ci & cqe_cnt].pkt_info); /* Fix endianness. */ zip->cqe_cnt = rte_be_to_cpu_32(cqe->byte_cnt); @@ -1158,10 +1164,9 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, * 7 CQEs after the initial CQE instead of 8 * for subsequent ones. */ - zip->ca = rxq->cq_ci; + zip->ca = cq_ci; zip->na = zip->ca + 7; /* Compute the next non compressed CQE. */ - --rxq->cq_ci; zip->cq_ci = rxq->cq_ci + zip->cqe_cnt; /* Get packet size to return. */ len = rte_be_to_cpu_32((*mc)[0].byte_cnt); @@ -1176,6 +1181,7 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, ++idx; } } else { + rxq->cq_ci = cq_ci; len = rte_be_to_cpu_32(cqe->byte_cnt); } } -- 2.27.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2020-11-17 11:13:13.651445451 +0000 +++ 0016-net-mlx5-fix-Rx-queue-completion-index-consistency.patch 2020-11-17 11:13:12.893116045 +0000 @@ -1 +1 @@ -From 70d83ebbbb2554bcab78bfe7f5b102635278bc76 Mon Sep 17 00:00:00 2001 +From c8b25df21ec9ed4c79ca43a85a851a15184cc989 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 70d83ebbbb2554bcab78bfe7f5b102635278bc76 ] + @@ -14 +15,0 @@ -Cc: stable@dpdk.org @@ -19 +19,0 @@ - drivers/net/mlx5/mlx5_rxq.c | 2 +- @@ -21 +21 @@ - 2 files changed, 12 insertions(+), 6 deletions(-) + 1 file changed, 11 insertions(+), 5 deletions(-) @@ -23,13 +22,0 @@ -diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c -index c04746afb1..f299fbc8a5 100644 ---- a/drivers/net/mlx5/mlx5_rxq.c -+++ b/drivers/net/mlx5/mlx5_rxq.c -@@ -622,7 +622,7 @@ mlx5_rx_queue_start_primary(struct rte_eth_dev *dev, uint16_t idx) - rte_io_wmb(); - *rxq->cq_db = rte_cpu_to_be_32(rxq->cq_ci); - rte_io_wmb(); -- /* Reset RQ consumer before moving queue ro READY state. */ -+ /* Reset RQ consumer before moving queue to READY state. */ - *rxq->rq_db = rte_cpu_to_be_32(0); - rte_io_wmb(); - ret = priv->obj_ops.rxq_obj_modify(rxq_ctrl->obj, MLX5_RXQ_MOD_RST2RDY); @@ -37 +24 @@ -index 402e7d1c3f..a5829f00de 100644 +index fb4fe94235..9f4a04122c 100644 @@ -40 +27 @@ -@@ -1181,6 +1181,7 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, +@@ -1125,6 +1125,7 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, @@ -48 +35 @@ -@@ -1194,14 +1195,19 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, +@@ -1138,14 +1139,19 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, @@ -71 +58 @@ -@@ -1214,10 +1220,9 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, +@@ -1158,10 +1164,9 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, @@ -82,2 +69,2 @@ - len = rte_be_to_cpu_32((*mc)[0].byte_cnt & -@@ -1233,6 +1238,7 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe, + len = rte_be_to_cpu_32((*mc)[0].byte_cnt); +@@ -1176,6 +1181,7 @@ mlx5_rx_poll_len(struct mlx5_rxq_data *rxq, volatile struct mlx5_cqe *cqe,