patch 'dma/hisilicon: enhance CQ scan robustness' has been queued to stable release 21.11.2

Kevin Traynor ktraynor at redhat.com
Thu Jun 9 13:37:00 CEST 2022


Hi,

FYI, your patch has been queued to stable release 21.11.2

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 06/13/22. 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/kevintraynor/dpdk-stable

This queued commit can be viewed at:
https://github.com/kevintraynor/dpdk-stable/commit/216108acda7431ddb793c352c16fcf824621fdf0

Thanks.

Kevin

---
>From 216108acda7431ddb793c352c16fcf824621fdf0 Mon Sep 17 00:00:00 2001
From: Chengwen Feng <fengchengwen at huawei.com>
Date: Fri, 27 May 2022 11:40:54 +0800
Subject: [PATCH] dma/hisilicon: enhance CQ scan robustness

[ upstream commit e03c601acb4d483a7305fb9ad15e13f6645b02e2 ]

The CQ (completion queue) descriptors were updated by hardware, and then
scanned by driver to retrieve hardware completion status.

This patch enhances robustness by following:
1. replace while (true) with a finite loop to avoid potential dead loop.
2. check the csq_head field in CQ descriptor to avoid status array
overflows.

Fixes: 2db4f0b82360 ("dma/hisilicon: add data path")

Signed-off-by: Chengwen Feng <fengchengwen at huawei.com>
---
 drivers/dma/hisilicon/hisi_dmadev.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/dma/hisilicon/hisi_dmadev.c b/drivers/dma/hisilicon/hisi_dmadev.c
index ef4c7b18f7..ec687ef67e 100644
--- a/drivers/dma/hisilicon/hisi_dmadev.c
+++ b/drivers/dma/hisilicon/hisi_dmadev.c
@@ -582,5 +582,5 @@ hisi_dma_scan_cq(struct hisi_dma_dev *hw)
 	uint64_t misc;
 
-	while (true) {
+	while (count < hw->cq_depth) {
 		cqe = &hw->cqe[cq_head];
 		misc = cqe->misc;
@@ -590,4 +590,14 @@ hisi_dma_scan_cq(struct hisi_dma_dev *hw)
 
 		csq_head = FIELD_GET(CQE_SQ_HEAD_MASK, misc);
+		if (unlikely(csq_head > hw->sq_depth_mask)) {
+			/**
+			 * Defensive programming to prevent overflow of the
+			 * status array indexed by csq_head. Only error logs
+			 * are used for prompting.
+			 */
+			HISI_DMA_ERR(hw, "invalid csq_head:%u!\n", csq_head);
+			count = 0;
+			break;
+		}
 		if (unlikely(misc & CQE_STATUS_MASK))
 			hw->status[csq_head] = FIELD_GET(CQE_STATUS_MASK,
-- 
2.34.3

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2022-06-09 12:34:31.418484139 +0100
+++ 0073-dma-hisilicon-enhance-CQ-scan-robustness.patch	2022-06-09 12:34:29.813980756 +0100
@@ -1 +1 @@
-From e03c601acb4d483a7305fb9ad15e13f6645b02e2 Mon Sep 17 00:00:00 2001
+From 216108acda7431ddb793c352c16fcf824621fdf0 Mon Sep 17 00:00:00 2001
@@ -5,0 +6,2 @@
+[ upstream commit e03c601acb4d483a7305fb9ad15e13f6645b02e2 ]
+
@@ -15 +16,0 @@
-Cc: stable at dpdk.org
@@ -23 +24 @@
-index f5c3cd914d..fbe09284ed 100644
+index ef4c7b18f7..ec687ef67e 100644
@@ -26 +27 @@
-@@ -635,5 +635,5 @@ hisi_dma_scan_cq(struct hisi_dma_dev *hw)
+@@ -582,5 +582,5 @@ hisi_dma_scan_cq(struct hisi_dma_dev *hw)
@@ -33 +34 @@
-@@ -643,4 +643,14 @@ hisi_dma_scan_cq(struct hisi_dma_dev *hw)
+@@ -590,4 +590,14 @@ hisi_dma_scan_cq(struct hisi_dma_dev *hw)



More information about the stable mailing list