Merge tag 'v6.4-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6

Pull crypto fixes from Herbert Xu:

 - A long-standing bug in crypto_engine

 - A buggy but harmless check in the sun8i-ss driver

 - A regression in the CRYPTO_USER interface

* tag 'v6.4-p2' of git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6:
  crypto: api - Fix CRYPTO_USER checks for report function
  crypto: engine - fix crypto_queue backlog handling
  crypto: sun8i-ss - Fix a test in sun8i_ss_setup_ivs()
diff --git a/crypto/acompress.c b/crypto/acompress.c
index 82a290d..1c68281 100644
--- a/crypto/acompress.c
+++ b/crypto/acompress.c
@@ -125,7 +125,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_acomp_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_acomp_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/aead.c b/crypto/aead.c
index ffc48a7..d5ba204 100644
--- a/crypto/aead.c
+++ b/crypto/aead.c
@@ -242,7 +242,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_aead_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_aead_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/ahash.c b/crypto/ahash.c
index b8a6079..3246510 100644
--- a/crypto/ahash.c
+++ b/crypto/ahash.c
@@ -509,7 +509,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_ahash_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_ahash_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/akcipher.c b/crypto/akcipher.c
index 186e762..7960ceb 100644
--- a/crypto/akcipher.c
+++ b/crypto/akcipher.c
@@ -98,7 +98,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_akcipher_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_akcipher_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/algapi.c b/crypto/algapi.c
index d7eb8f9..5e7cd60 100644
--- a/crypto/algapi.c
+++ b/crypto/algapi.c
@@ -961,6 +961,9 @@
 void crypto_enqueue_request_head(struct crypto_queue *queue,
 				 struct crypto_async_request *request)
 {
+	if (unlikely(queue->qlen >= queue->max_qlen))
+		queue->backlog = queue->backlog->prev;
+
 	queue->qlen++;
 	list_add(&request->list, &queue->list);
 }
diff --git a/crypto/crypto_engine.c b/crypto/crypto_engine.c
index 21f7916..74fcc08 100644
--- a/crypto/crypto_engine.c
+++ b/crypto/crypto_engine.c
@@ -129,9 +129,6 @@
 	if (!engine->retry_support)
 		engine->cur_req = async_req;
 
-	if (backlog)
-		crypto_request_complete(backlog, -EINPROGRESS);
-
 	if (engine->busy)
 		was_busy = true;
 	else
@@ -217,6 +214,9 @@
 	crypto_request_complete(async_req, ret);
 
 retry:
+	if (backlog)
+		crypto_request_complete(backlog, -EINPROGRESS);
+
 	/* If retry mechanism is supported, send new requests to engine */
 	if (engine->retry_support) {
 		spin_lock_irqsave(&engine->queue_lock, flags);
diff --git a/crypto/kpp.c b/crypto/kpp.c
index 74f2e8e..33d44e5 100644
--- a/crypto/kpp.c
+++ b/crypto/kpp.c
@@ -96,7 +96,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_kpp_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_kpp_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/rng.c b/crypto/rng.c
index ffde0f6..279dffd 100644
--- a/crypto/rng.c
+++ b/crypto/rng.c
@@ -118,7 +118,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_rng_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_rng_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/scompress.c b/crypto/scompress.c
index 24138b4..442a82c 100644
--- a/crypto/scompress.c
+++ b/crypto/scompress.c
@@ -240,7 +240,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_scomp_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_scomp_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/shash.c b/crypto/shash.c
index 5845b7d..717b42d 100644
--- a/crypto/shash.c
+++ b/crypto/shash.c
@@ -548,7 +548,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_shash_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_shash_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/crypto/skcipher.c b/crypto/skcipher.c
index 6caca02d..7b27571 100644
--- a/crypto/skcipher.c
+++ b/crypto/skcipher.c
@@ -776,7 +776,7 @@
 #ifdef CONFIG_PROC_FS
 	.show = crypto_skcipher_show,
 #endif
-#ifdef CONFIG_CRYPTO_USER
+#if IS_ENABLED(CONFIG_CRYPTO_USER)
 	.report = crypto_skcipher_report,
 #endif
 #ifdef CONFIG_CRYPTO_STATS
diff --git a/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c b/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c
index 83c6dfa..16966cc 100644
--- a/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c
+++ b/drivers/crypto/allwinner/sun8i-ss/sun8i-ss-cipher.c
@@ -151,7 +151,7 @@
 		}
 		rctx->p_iv[i] = a;
 		/* we need to setup all others IVs only in the decrypt way */
-		if (rctx->op_dir & SS_ENCRYPTION)
+		if (rctx->op_dir == SS_ENCRYPTION)
 			return 0;
 		todo = min(len, sg_dma_len(sg));
 		len -= todo;