Thread (16 messages) 16 messages, 2 authors, 2020-03-20

Re: [PATCH] crypto: only wait for completion once

From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: 2020-01-14 12:47:35

On 2019-12-31 12:00:51 [+0200], John Mathew wrote:
Proposed fix for the swake_up_all_locked warnings issue discussed in
Link: https://lore.kernel.org/linux-rt-users/20191218165334.k4suur4gzlu62ibs@linutronix.de/T/#t (local)
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.
Have you tested this patch and if so how?
quoted hunk ↗ jump to hunk
Signed-off-by: John Mathew <redacted>
---
 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);
 
Sebastian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help