All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eric Biggers <ebiggers@kernel.org>
To: Harald Freudenberger <freude@linux.ibm.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
	davem@davemloft.net, dengler@linux.ibm.com,
	linux-s390@vger.kernel.org, linux-crypto@vger.kernel.org,
	dm-devel@lists.linux.dev
Subject: Re: [PATCH v10 2/5] s390/crypto: New s390 specific protected key hash phmac
Date: Wed, 12 Feb 2025 07:20:56 -0800	[thread overview]
Message-ID: <20250212152056.GA1256@sol.localdomain> (raw)
In-Reply-To: <9971160da17b1d18d4bdc87fc1297fda@linux.ibm.com>

On Wed, Feb 12, 2025 at 12:17:46PM +0100, Harald Freudenberger wrote:
> On 2025-02-09 17:34, Eric Biggers wrote:
> > On Sun, Feb 09, 2025 at 04:47:57PM +0800, Herbert Xu wrote:
> > > On Wed, Jan 15, 2025 at 05:22:28PM +0100, Harald Freudenberger wrote:
> > > >
> > > > +static int s390_phmac_init(struct ahash_request *req)
> > > > +{
> > > > +	struct s390_phmac_req_ctx *req_ctx = ahash_request_ctx(req);
> > > > +	struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
> > > > +	struct s390_kmac_sha2_ctx *ctx = &req_ctx->sha2_ctx;
> > > > +	int rc;
> > > > +
> > > > +	/*
> > > > +	 * First try synchronous. If this fails for any reason
> > > > +	 * schedule this request asynchronous via workqueue.
> > > > +	 */
> > > > +
> > > > +	rc = phmac_init(tfm, ctx, false);
> > > > +	if (!rc)
> > > > +		goto out;
> > > > +
> > > > +	req_ctx->req = req;
> > > > +	INIT_DELAYED_WORK(&req_ctx->work, phmac_wq_init_fn);
> > > > +	schedule_delayed_work(&req_ctx->work, 0);
> > > > +	rc = -EINPROGRESS;
> > > 
> > > This creates a resource problem because there is no limit on how
> > > many requests that can be delayed in this manner for a given tfm.
> > > 
> > > When we hit this case, I presume this is a system-wide issue and
> > > all requests would go pending? If that is the case, I suggest
> > > allocating a system-wide queue through crypto_engine and using
> > > that to limit how many requests that can become EINPROGRESS.
> > 
> > Or just make it synchronous which would be way easier, and the calling
> > code uses
> > it synchronously anyway.
> > 
> > - Eric
> 
> A word about synchronous vs asynchronous...
> 
> As a synchronous hash (or chipher or whatever) MUST NOT sleep I can't
> really implement the pkey stuff in a synchronous way:

As I said at
https://lore.kernel.org/dm-devel/20250116080324.GA3910@sol.localdomain/, shash
could fairly easily be fixed to support sleepable algorithms (e.g.
CRYPTO_ALG_SLEEPABLE).

This would be *much* simpler than doing it with ahash.

You even had it as a shash already in the first version of your patchset, just
missing the bits that add the support for sleepable algorithms.

I am trying to help you by suggesting an approach that would be much easier.
There is no need to shoehorn CPU-based crypto into ahash, which is designed for
off-CPU offload.

> The issue with pkey (We call it "protected key") is that it is some kind
> of hardware based key. As such it needs some special preparation action
> to be done upfront in the hardware/firmware to use such a pkey.
> Now think about KVM live guest migration where a guest suddenly awakes
> (Well the guest is not even aware of this) on a new machine with another
> hardware. So out of the sudden a hardware based crypto operation fails
> with an indication that the hardware/firmware can't deal with this
> key object and needs re-preparation. Usually this preparation step is
> some kind of asynchronous operation (write some pci registers or run
> some DMA sequences or refresh the working key material via an HSM
> communication...) and as such may take some time and involve even
> sleeping on a mutex or completion until another kernel thread is done.
> Please note this is not unique to pkey on system z but may apply
> to all kinds of hardware/firmware based keys in situations like
> KVM live guest migration or suspend/resume.

I.e. it already uses a kernel thread that does the operation synchronously (as
opposed to being actual hardware offload that does not consume a thread and
signals completion to the CPU via an interrupt), in addition to the caller's
thread which also waits synchronously via crypto_wait_req().  There is really no
need to make it async, nor to use scatterlists.

- Eric

  reply	other threads:[~2025-02-12 15:20 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-15 16:22 New s390 specific protected key hmac Harald Freudenberger
2025-01-15 16:22 ` [PATCH v10 1/5] s390/crypto: Add protected key hmac subfunctions for KMAC Harald Freudenberger
2025-01-15 16:22 ` [PATCH v10 2/5] s390/crypto: New s390 specific protected key hash phmac Harald Freudenberger
2025-02-09  8:47   ` Herbert Xu
2025-02-09 16:34     ` Eric Biggers
2025-02-10  7:57       ` Herbert Xu
2025-02-10 16:32         ` Eric Biggers
2025-02-10 23:14           ` Herbert Xu
2025-02-12 11:17       ` Harald Freudenberger
2025-02-12 15:20         ` Eric Biggers [this message]
2025-02-13  4:08         ` Herbert Xu
2025-02-11 12:09   ` Harald Freudenberger
2025-02-11 15:31     ` Eric Biggers
2025-02-12  3:19     ` Herbert Xu
2025-02-12  3:23       ` Herbert Xu
2025-02-12  3:32         ` Eric Biggers
2025-02-22  8:23           ` Herbert Xu
2025-01-15 16:22 ` [PATCH v10 3/5] crypto: api - Add crypto_tfm_alg_get_flags() helper inline function Harald Freudenberger
2025-01-15 16:22 ` [PATCH v10 4/5] s390/crypto: Add selftest support for phmac Harald Freudenberger
2025-01-15 16:22 ` [PATCH v10 5/5] crypto: testmgr - Enable phmac selftest Harald Freudenberger

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=20250212152056.GA1256@sol.localdomain \
    --to=ebiggers@kernel.org \
    --cc=davem@davemloft.net \
    --cc=dengler@linux.ibm.com \
    --cc=dm-devel@lists.linux.dev \
    --cc=freude@linux.ibm.com \
    --cc=herbert@gondor.apana.org.au \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.