Oliver Neukum f3ee3c
From e04ec0de61c1eb9693179093e83ab8ca68a30d08 Mon Sep 17 00:00:00 2001
Oliver Neukum f3ee3c
From: Daniel Jordan <daniel.m.jordan@oracle.com>
Oliver Neukum f3ee3c
Date: Mon, 8 Jun 2020 17:26:52 -0400
Oliver Neukum f3ee3c
Subject: [PATCH] padata: upgrade smp_mb__after_atomic to smp_mb in
Oliver Neukum f3ee3c
 padata_do_serial
Oliver Neukum f3ee3c
Git-commit: e04ec0de61c1eb9693179093e83ab8ca68a30d08
Oliver Neukum f3ee3c
Patch-mainline: v5.8-rc4
Oliver Neukum f3ee3c
References: bsc#1178648
Oliver Neukum f3ee3c
Oliver Neukum f3ee3c
A 5.7 kernel hangs during a tcrypt test of padata that waits for an AEAD
Oliver Neukum f3ee3c
request to finish.  This is only seen on large machines running many
Oliver Neukum f3ee3c
concurrent requests.
Oliver Neukum f3ee3c
Oliver Neukum f3ee3c
The issue is that padata never serializes the request.  The removal of
Oliver Neukum f3ee3c
the reorder_objects atomic missed that the memory barrier in
Oliver Neukum f3ee3c
padata_do_serial() depends on it.
Oliver Neukum f3ee3c
Oliver Neukum f3ee3c
Upgrade the barrier from smp_mb__after_atomic to smp_mb to get correct
Oliver Neukum f3ee3c
ordering again.
Oliver Neukum f3ee3c
Oliver Neukum f3ee3c
Fixes: 3facced7aeed1 ("padata: remove reorder_objects")
Oliver Neukum f3ee3c
Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com>
Oliver Neukum f3ee3c
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Oliver Neukum f3ee3c
Cc: linux-kernel@vger.kernel.org
Oliver Neukum f3ee3c
Cc: <stable@vger.kernel.org>
Oliver Neukum f3ee3c
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Oliver Neukum f3ee3c
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Oliver Neukum f3ee3c
---
Oliver Neukum f3ee3c
 kernel/padata.c | 4 ++--
Oliver Neukum f3ee3c
 1 file changed, 2 insertions(+), 2 deletions(-)
Oliver Neukum f3ee3c
Oliver Neukum f3ee3c
diff --git a/kernel/padata.c b/kernel/padata.c
Oliver Neukum f3ee3c
index 29fc5d87a4cd..4373f7adaa40 100644
Oliver Neukum f3ee3c
--- a/kernel/padata.c
Oliver Neukum f3ee3c
+++ b/kernel/padata.c
Oliver Neukum f3ee3c
@@ -335,7 +335,7 @@ static void padata_reorder(struct parallel_data *pd)
Oliver Neukum f3ee3c
 	 *
Oliver Neukum f3ee3c
 	 * Ensure reorder queue is read after pd->lock is dropped so we see
Oliver Neukum f3ee3c
 	 * new objects from another task in padata_do_serial.  Pairs with
Oliver Neukum f3ee3c
-	 * smp_mb__after_atomic in padata_do_serial.
Oliver Neukum f3ee3c
+	 * smp_mb in padata_do_serial.
Oliver Neukum f3ee3c
 	 */
Oliver Neukum f3ee3c
 	smp_mb();
Oliver Neukum f3ee3c
 
Oliver Neukum f3ee3c
@@ -418,7 +418,7 @@ void padata_do_serial(struct padata_priv *padata)
Oliver Neukum f3ee3c
 	 * with the trylock of pd->lock in padata_reorder.  Pairs with smp_mb
Oliver Neukum f3ee3c
 	 * in padata_reorder.
Oliver Neukum f3ee3c
 	 */
Oliver Neukum f3ee3c
-	smp_mb__after_atomic();
Oliver Neukum f3ee3c
+	smp_mb();
Oliver Neukum f3ee3c
 
Oliver Neukum f3ee3c
 	padata_reorder(pd);
Oliver Neukum f3ee3c
 }
Oliver Neukum f3ee3c
-- 
Oliver Neukum f3ee3c
2.26.2
Oliver Neukum f3ee3c