Michal Suchanek a125c4
From e41aec79e62fa50f940cf222d1e9577f14e149dc Mon Sep 17 00:00:00 2001
Michal Suchanek a125c4
From: Lijun Pan <ljp@linux.ibm.com>
Michal Suchanek a125c4
Date: Wed, 27 Jan 2021 19:34:42 -0600
Michal Suchanek a125c4
Subject: [PATCH] ibmvnic: Ensure that CRQ entry read are correctly ordered
Michal Suchanek a125c4
Michal Suchanek a125c4
References: bsc#1184114 ltc#192237 bsc#1182485 ltc#191591
Michal Suchanek a125c4
Patch-mainline: v5.11-rc6
Michal Suchanek a125c4
Git-commit: e41aec79e62fa50f940cf222d1e9577f14e149dc
Michal Suchanek a125c4
Michal Suchanek a125c4
Ensure that received Command-Response Queue (CRQ) entries are
Michal Suchanek a125c4
properly read in order by the driver. dma_rmb barrier has
Michal Suchanek a125c4
been added before accessing the CRQ descriptor to ensure
Michal Suchanek a125c4
the entire descriptor is read before processing.
Michal Suchanek a125c4
Michal Suchanek a125c4
Fixes: 032c5e82847a ("Driver for IBM System i/p VNIC protocol")
Michal Suchanek a125c4
Signed-off-by: Lijun Pan <ljp@linux.ibm.com>
Michal Suchanek a125c4
Link: https://lore.kernel.org/r/20210128013442.88319-1-ljp@linux.ibm.com
Michal Suchanek a125c4
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Michal Suchanek a125c4
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek a125c4
---
Michal Suchanek a125c4
 drivers/net/ethernet/ibm/ibmvnic.c | 6 ++++++
Michal Suchanek a125c4
 1 file changed, 6 insertions(+)
Michal Suchanek a125c4
Michal Suchanek a125c4
diff --git a/drivers/net/ethernet/ibm/ibmvnic.c b/drivers/net/ethernet/ibm/ibmvnic.c
Michal Suchanek a125c4
index 9778c83150f1..8820c98ea891 100644
Michal Suchanek a125c4
--- a/drivers/net/ethernet/ibm/ibmvnic.c
Michal Suchanek a125c4
+++ b/drivers/net/ethernet/ibm/ibmvnic.c
Michal Suchanek a125c4
@@ -5084,6 +5084,12 @@ static void ibmvnic_tasklet(struct tasklet_struct *t)
Michal Suchanek a125c4
 	while (!done) {
Michal Suchanek a125c4
 		/* Pull all the valid messages off the CRQ */
Michal Suchanek a125c4
 		while ((crq = ibmvnic_next_crq(adapter)) != NULL) {
Michal Suchanek a125c4
+			/* This barrier makes sure ibmvnic_next_crq()'s
Michal Suchanek a125c4
+			 * crq->generic.first & IBMVNIC_CRQ_CMD_RSP is loaded
Michal Suchanek a125c4
+			 * before ibmvnic_handle_crq()'s
Michal Suchanek a125c4
+			 * switch(gen_crq->first) and switch(gen_crq->cmd).
Michal Suchanek a125c4
+			 */
Michal Suchanek a125c4
+			dma_rmb();
Michal Suchanek a125c4
 			ibmvnic_handle_crq(crq, adapter);
Michal Suchanek a125c4
 			crq->generic.first = 0;
Michal Suchanek a125c4
 		}
Michal Suchanek a125c4
-- 
Michal Suchanek a125c4
2.26.2
Michal Suchanek a125c4