Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

padata: upgrade smp_mb__after_atomic to smp_mb in padata_do_serial

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>

authored by

Daniel Jordan and committed by
Herbert Xu
e04ec0de 34c86f4c

+2 -2
+2 -2
kernel/padata.c
··· 335 335 * 336 336 * Ensure reorder queue is read after pd->lock is dropped so we see 337 337 * new objects from another task in padata_do_serial. Pairs with 338 - * smp_mb__after_atomic in padata_do_serial. 338 + * smp_mb in padata_do_serial. 339 339 */ 340 340 smp_mb(); 341 341 ··· 418 418 * with the trylock of pd->lock in padata_reorder. Pairs with smp_mb 419 419 * in padata_reorder. 420 420 */ 421 - smp_mb__after_atomic(); 421 + smp_mb(); 422 422 423 423 padata_reorder(pd); 424 424 }