From: Peter Zijlstra <peterz@infradead.org>
To: Holger Dengler <dengler@linux.ibm.com>
Cc: Heiko Carstens <hca@linux.ibm.com>,
Alexander Gordeev <agordeev@linux.ibm.com>,
Sven Schnelle <svens@linux.ibm.com>,
Vasily Gorbik <gor@linux.ibm.com>,
Christian Borntraeger <borntraeger@linux.ibm.com>,
Harald Freudenberger <freude@linux.ibm.com>,
Vineeth Vijayan <vneethv@linux.ibm.com>,
Peter Oberparleiter <oberpar@linux.ibm.com>,
Janosch Frank <frankja@linux.ibm.com>,
Claudio Imbrenda <imbrenda@linux.ibm.com>,
David Hildenbrand <david@kernel.org>,
Herbert Xu <herbert@gondor.apana.org.au>,
linux-s390@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-crypto@vger.kernel.org
Subject: Re: [PATCH v3 1/4] s390/crypto: Replace cond_resched() with msleep(1)
Date: Fri, 31 Jul 2026 10:40:27 +0200 [thread overview]
Message-ID: <20260731084027.GE776954@noisy.programming.kicks-ass.net> (raw)
In-Reply-To: <18c36e42-8f96-479c-8152-2da3f5034f04@linux.ibm.com>
On Fri, Jul 31, 2026 at 09:44:57AM +0200, Holger Dengler wrote:
> > Yes, guest migration is very likely far more disruptive than most
> > anything else. Perhaps clarify the code comment to include some of this
> > explanation?
>
> I agree, the comment is not telling all main key points. What about the
> following?
>
> /*
> * Protected key expired due to relocation to another
> * host. The long runnning re-wrap has no asynchronous
> * completion notification, so polling is required.
> * Trigger a re-schedule of this request by returning
> * -ENOSPC ("hardware queue full") to the crypto engine.
> * To avoid immediately re-invocation of this callback,
> * tell scheduler to voluntarily give up the CPU here.
> */
>
> (I would leave it up to Heiko to merge the comment in his series, or let
> Harald/me do it in a separate patch)
Right, perhaps something like so, avoiding the endless copy/paste ?
---
diff --git a/arch/s390/crypto/paes_s390.c b/arch/s390/crypto/paes_s390.c
index 8cfe6166c193..973436592318 100644
--- a/arch/s390/crypto/paes_s390.c
+++ b/arch/s390/crypto/paes_s390.c
@@ -548,16 +548,7 @@ static int ecb_paes_do_one_request(struct crypto_engine *engine, void *areq)
rc = ecb_paes_do_crypt(ctx, req_ctx, tested, true);
if (rc == -EKEYEXPIRED) {
- /*
- * Protected key expired, conversion is in process.
- * Trigger a re-schedule of this request by returning
- * -ENOSPC ("hardware queue is full") to the crypto engine.
- * To avoid immediately re-invocation of this callback,
- * tell the scheduler to voluntarily give up the CPU here.
- */
- cond_resched();
- pr_debug("rescheduling request\n");
- return -ENOSPC;
+ return pkey_handle_expired();
} else if (rc) {
skcipher_walk_done(walk, rc);
}
@@ -814,16 +805,7 @@ static int cbc_paes_do_one_request(struct crypto_engine *engine, void *areq)
rc = cbc_paes_do_crypt(ctx, req_ctx, tested, true);
if (rc == -EKEYEXPIRED) {
- /*
- * Protected key expired, conversion is in process.
- * Trigger a re-schedule of this request by returning
- * -ENOSPC ("hardware queue is full") to the crypto engine.
- * To avoid immediately re-invocation of this callback,
- * tell the scheduler to voluntarily give up the CPU here.
- */
- cond_resched();
- pr_debug("rescheduling request\n");
- return -ENOSPC;
+ return pkey_handle_expired();
} else if (rc) {
skcipher_walk_done(walk, rc);
}
@@ -1122,16 +1104,7 @@ static int ctr_paes_do_one_request(struct crypto_engine *engine, void *areq)
rc = ctr_paes_do_crypt(ctx, req_ctx, tested, true);
if (rc == -EKEYEXPIRED) {
- /*
- * Protected key expired, conversion is in process.
- * Trigger a re-schedule of this request by returning
- * -ENOSPC ("hardware queue is full") to the crypto engine.
- * To avoid immediately re-invocation of this callback,
- * tell the scheduler to voluntarily give up the CPU here.
- */
- cond_resched();
- pr_debug("rescheduling request\n");
- return -ENOSPC;
+ return pkey_handle_expired();
} else if (rc) {
skcipher_walk_done(walk, rc);
}
@@ -1565,16 +1538,7 @@ static int xts_paes_do_one_request(struct crypto_engine *engine, void *areq)
rc = xts_paes_do_crypt(ctx, req_ctx, tested, true);
if (rc == -EKEYEXPIRED) {
- /*
- * Protected key expired, conversion is in process.
- * Trigger a re-schedule of this request by returning
- * -ENOSPC ("hardware queue is full") to the crypto engine.
- * To avoid immediately re-invocation of this callback,
- * tell the scheduler to voluntarily give up the CPU here.
- */
- cond_resched();
- pr_debug("rescheduling request\n");
- return -ENOSPC;
+ return pkey_handle_expired();
} else if (rc) {
skcipher_walk_done(walk, rc);
}
diff --git a/arch/s390/crypto/phmac_s390.c b/arch/s390/crypto/phmac_s390.c
index 03ca33ffe6cc..020a1beb2e22 100644
--- a/arch/s390/crypto/phmac_s390.c
+++ b/arch/s390/crypto/phmac_s390.c
@@ -887,16 +887,7 @@ static int phmac_do_one_request(struct crypto_engine *engine, void *areq)
case OP_FINUP:
rc = phmac_kmac_update(req, true);
if (rc == -EKEYEXPIRED) {
- /*
- * Protected key expired, conversion is in process.
- * Trigger a re-schedule of this request by returning
- * -ENOSPC ("hardware queue full") to the crypto engine.
- * To avoid immediately re-invocation of this callback,
- * tell scheduler to voluntarily give up the CPU here.
- */
- pr_debug("rescheduling request\n");
- cond_resched();
- return -ENOSPC;
+ return pkey_handle_expired();
} else if (rc) {
hwh_advance(hwh, rc);
goto out;
@@ -907,18 +898,8 @@ static int phmac_do_one_request(struct crypto_engine *engine, void *areq)
fallthrough;
case OP_FINAL:
rc = phmac_kmac_final(req, true);
- if (rc == -EKEYEXPIRED) {
- /*
- * Protected key expired, conversion is in process.
- * Trigger a re-schedule of this request by returning
- * -ENOSPC ("hardware queue full") to the crypto engine.
- * To avoid immediately re-invocation of this callback,
- * tell scheduler to voluntarily give up the CPU here.
- */
- pr_debug("rescheduling request\n");
- cond_resched();
- return -ENOSPC;
- }
+ if (rc == -EKEYEXPIRED)
+ return pkey_handle_expired();
break;
default:
/* unknown/unsupported/unimplemented asynch op */
diff --git a/arch/s390/include/asm/pkey.h b/arch/s390/include/asm/pkey.h
index 0af5ac4f646b..9c5f31b50bc8 100644
--- a/arch/s390/include/asm/pkey.h
+++ b/arch/s390/include/asm/pkey.h
@@ -13,6 +13,7 @@
#include <linux/ioctl.h>
#include <linux/types.h>
+#include <linux/delay.h>
#include <uapi/asm/pkey.h>
/*
@@ -44,4 +45,20 @@ int pkey_key2protkey(const u8 *key, u32 keylen,
*/
#define PKEY_XFLAG_NOCLEARKEY 0x0002
+static inline int pkey_handle_expired(void)
+{
+ /*
+ * Protected key expired due to relocation to another
+ * host. The long runnning re-wrap has no asynchronous
+ * completion notification, so polling is required.
+ * Trigger a re-schedule of this request by returning
+ * -ENOSPC ("hardware queue full") to the crypto engine.
+ * To avoid immediately re-invocation of this callback,
+ * tell scheduler to voluntarily give up the CPU here.
+ */
+ msleep(1);
+ pr_debug("rescheduling request\n");
+ return -ENOSPC;
+}
+
#endif /* _KAPI_PKEY_H */
next prev parent reply other threads:[~2026-07-31 8:40 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-30 5:29 [PATCH v3 0/4] s390: Remove or replace cond_resched() calls Heiko Carstens
2026-07-30 5:29 ` [PATCH v3 1/4] s390/crypto: Replace cond_resched() with msleep(1) Heiko Carstens
2026-07-30 7:47 ` Holger Dengler
2026-07-30 10:11 ` Peter Zijlstra
2026-07-30 11:34 ` Holger Dengler
2026-07-30 12:48 ` Peter Zijlstra
2026-07-31 7:44 ` Holger Dengler
2026-07-31 8:40 ` Peter Zijlstra [this message]
2026-07-31 11:56 ` Heiko Carstens
2026-07-30 5:29 ` [PATCH v3 2/4] KVM: s390: Remove cond_resched() calls Heiko Carstens
2026-07-30 8:51 ` Claudio Imbrenda
2026-07-30 5:29 ` [PATCH v3 3/4] " Heiko Carstens
2026-07-30 5:29 ` [PATCH v3 4/4] s390/cio: " Heiko Carstens
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260731084027.GE776954@noisy.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=agordeev@linux.ibm.com \
--cc=borntraeger@linux.ibm.com \
--cc=david@kernel.org \
--cc=dengler@linux.ibm.com \
--cc=frankja@linux.ibm.com \
--cc=freude@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=herbert@gondor.apana.org.au \
--cc=imbrenda@linux.ibm.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=oberpar@linux.ibm.com \
--cc=svens@linux.ibm.com \
--cc=vneethv@linux.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox