|
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 |
|