Proposed fix for the swake_up_all_locked warnings issue discussed in Link: https://lore.kernel.org/linux-rt-users/20191218165334.k4suur4gzlu62ibs@xxxxxxxxxxxxx/T/#t Currently multiple wait for completions are scheduled for the same algo. Only one completes and the rest are returned with ENOENT. This patch checks for the name of the algorithm going to be waited up on, and if the algorithm is already being waited for completion return EAGAIN , without accumulating completions and returning ENOENT. Signed-off-by: John Mathew <john.mathew@xxxxxxxxxx> --- crypto/api.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/crypto/api.c b/crypto/api.c index d8ba54142620..1c6004e7ab6c 100644 --- a/crypto/api.c +++ b/crypto/api.c @@ -234,8 +234,12 @@ static struct crypto_alg *crypto_larval_lookup(const char *name, u32 type, alg = crypto_alg_lookup(name, type, mask); } - if (!IS_ERR_OR_NULL(alg) && crypto_is_larval(alg)) - alg = crypto_larval_wait(alg); + if (!IS_ERR_OR_NULL(alg) && crypto_is_larval(alg)) { + if (!strcmp(alg->cra_name, name)) + alg = ERR_PTR(-EAGAIN); + else + alg = crypto_larval_wait(alg); + } else if (!alg) alg = crypto_larval_add(name, type, mask); -- 2.17.1