summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jordan <daniel.m.jordan@oracle.com>2020-06-09 00:26:52 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-07-09 10:39:37 +0300
commit9088c4ec1ac3fd3edf0913cfb91b217dc9e1ce3a (patch)
tree58e83689cea22ed8e3e4062ee4c783e0bbfde636
parentd67dde02049e632ba58d3c44a164a74b6a737154 (diff)
downloadlinux-9088c4ec1ac3fd3edf0913cfb91b217dc9e1ce3a.tar.xz
padata: upgrade smp_mb__after_atomic to smp_mb in padata_do_serial
commit e04ec0de61c1eb9693179093e83ab8ca68a30d08 upstream. A 5.7 kernel hangs during a tcrypt test of padata that waits for an AEAD request to finish. This is only seen on large machines running many concurrent requests. The issue is that padata never serializes the request. The removal of the reorder_objects atomic missed that the memory barrier in padata_do_serial() depends on it. Upgrade the barrier from smp_mb__after_atomic to smp_mb to get correct ordering again. Fixes: 3facced7aeed1 ("padata: remove reorder_objects") Signed-off-by: Daniel Jordan <daniel.m.jordan@oracle.com> Cc: Steffen Klassert <steffen.klassert@secunet.com> Cc: linux-kernel@vger.kernel.org Cc: <stable@vger.kernel.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--kernel/padata.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/padata.c b/kernel/padata.c
index aae789896616..859c77d22aa7 100644
--- a/kernel/padata.c
+++ b/kernel/padata.c
@@ -260,7 +260,7 @@ static void padata_reorder(struct parallel_data *pd)
*
* Ensure reorder queue is read after pd->lock is dropped so we see
* new objects from another task in padata_do_serial. Pairs with
- * smp_mb__after_atomic in padata_do_serial.
+ * smp_mb in padata_do_serial.
*/
smp_mb();
@@ -342,7 +342,7 @@ void padata_do_serial(struct padata_priv *padata)
* with the trylock of pd->lock in padata_reorder. Pairs with smp_mb
* in padata_reorder.
*/
- smp_mb__after_atomic();
+ smp_mb();
padata_reorder(pd);
}