Quoting Herbert Xu (2023-01-24 09:58:41) > This patch replaces the custom crypto completion function with > crypto_req_done. > > Signed-off-by: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> Reviewed-by: Antoine Tenart <atenart@xxxxxxxxxx> Thanks! Antoine > diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c > index ae6110376e21..baff0123f919 100644 > --- a/drivers/crypto/inside-secure/safexcel.c > +++ b/drivers/crypto/inside-secure/safexcel.c > @@ -970,17 +970,6 @@ void safexcel_complete(struct safexcel_crypto_priv *priv, int ring) > } while (!cdesc->last_seg); > } > > -void safexcel_inv_complete(struct crypto_async_request *req, int error) > -{ > - struct safexcel_inv_result *result = req->data; > - > - if (error == -EINPROGRESS) > - return; > - > - result->error = error; > - complete(&result->completion); > -} > - > int safexcel_invalidate_cache(struct crypto_async_request *async, > struct safexcel_crypto_priv *priv, > dma_addr_t ctxr_dma, int ring) > diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside-secure/safexcel.h > index 6c2fc662f64f..47ef6c7cd02c 100644 > --- a/drivers/crypto/inside-secure/safexcel.h > +++ b/drivers/crypto/inside-secure/safexcel.h > @@ -884,11 +884,6 @@ struct safexcel_alg_template { > } alg; > }; > > -struct safexcel_inv_result { > - struct completion completion; > - int error; > -}; > - > void safexcel_dequeue(struct safexcel_crypto_priv *priv, int ring); > int safexcel_rdesc_check_errors(struct safexcel_crypto_priv *priv, > void *rdp); > @@ -927,7 +922,6 @@ void safexcel_rdr_req_set(struct safexcel_crypto_priv *priv, > struct crypto_async_request *req); > inline struct crypto_async_request * > safexcel_rdr_req_get(struct safexcel_crypto_priv *priv, int ring); > -void safexcel_inv_complete(struct crypto_async_request *req, int error); > int safexcel_hmac_setkey(struct safexcel_context *base, const u8 *key, > unsigned int keylen, const char *alg, > unsigned int state_sz); > diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c > index 32a37e3850c5..272c28b5a088 100644 > --- a/drivers/crypto/inside-secure/safexcel_cipher.c > +++ b/drivers/crypto/inside-secure/safexcel_cipher.c > @@ -1091,13 +1091,12 @@ static int safexcel_aead_send(struct crypto_async_request *async, int ring, > static int safexcel_cipher_exit_inv(struct crypto_tfm *tfm, > struct crypto_async_request *base, > struct safexcel_cipher_req *sreq, > - struct safexcel_inv_result *result) > + struct crypto_wait *result) > { > struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); > struct safexcel_crypto_priv *priv = ctx->base.priv; > int ring = ctx->base.ring; > - > - init_completion(&result->completion); > + int err; > > ctx = crypto_tfm_ctx(base->tfm); > ctx->base.exit_inv = true; > @@ -1110,13 +1109,13 @@ static int safexcel_cipher_exit_inv(struct crypto_tfm *tfm, > queue_work(priv->ring[ring].workqueue, > &priv->ring[ring].work_data.work); > > - wait_for_completion(&result->completion); > + err = crypto_wait_req(-EINPROGRESS, result); > > - if (result->error) { > + if (err) { > dev_warn(priv->dev, > "cipher: sync: invalidate: completion error %d\n", > - result->error); > - return result->error; > + err); > + return err; > } > > return 0; > @@ -1126,12 +1125,12 @@ static int safexcel_skcipher_exit_inv(struct crypto_tfm *tfm) > { > EIP197_REQUEST_ON_STACK(req, skcipher, EIP197_SKCIPHER_REQ_SIZE); > struct safexcel_cipher_req *sreq = skcipher_request_ctx(req); > - struct safexcel_inv_result result = {}; > + DECLARE_CRYPTO_WAIT(result); > > memset(req, 0, sizeof(struct skcipher_request)); > > skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, > - safexcel_inv_complete, &result); > + crypto_req_done, &result); > skcipher_request_set_tfm(req, __crypto_skcipher_cast(tfm)); > > return safexcel_cipher_exit_inv(tfm, &req->base, sreq, &result); > @@ -1141,12 +1140,12 @@ static int safexcel_aead_exit_inv(struct crypto_tfm *tfm) > { > EIP197_REQUEST_ON_STACK(req, aead, EIP197_AEAD_REQ_SIZE); > struct safexcel_cipher_req *sreq = aead_request_ctx(req); > - struct safexcel_inv_result result = {}; > + DECLARE_CRYPTO_WAIT(result); > > memset(req, 0, sizeof(struct aead_request)); > > aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, > - safexcel_inv_complete, &result); > + crypto_req_done, &result); > aead_request_set_tfm(req, __crypto_aead_cast(tfm)); > > return safexcel_cipher_exit_inv(tfm, &req->base, sreq, &result); > diff --git a/drivers/crypto/inside-secure/safexcel_hash.c b/drivers/crypto/inside-secure/safexcel_hash.c > index ca46328472d4..442f887e00ae 100644 > --- a/drivers/crypto/inside-secure/safexcel_hash.c > +++ b/drivers/crypto/inside-secure/safexcel_hash.c > @@ -625,15 +625,16 @@ static int safexcel_ahash_exit_inv(struct crypto_tfm *tfm) > struct safexcel_crypto_priv *priv = ctx->base.priv; > EIP197_REQUEST_ON_STACK(req, ahash, EIP197_AHASH_REQ_SIZE); > struct safexcel_ahash_req *rctx = ahash_request_ctx_dma(req); > - struct safexcel_inv_result result = {}; > + DECLARE_CRYPTO_WAIT(result); > int ring = ctx->base.ring; > + int err; > > memset(req, 0, EIP197_AHASH_REQ_SIZE); > > /* create invalidation request */ > init_completion(&result.completion); > ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, > - safexcel_inv_complete, &result); > + crypto_req_done, &result); > > ahash_request_set_tfm(req, __crypto_ahash_cast(tfm)); > ctx = crypto_tfm_ctx(req->base.tfm); > @@ -647,12 +648,11 @@ static int safexcel_ahash_exit_inv(struct crypto_tfm *tfm) > queue_work(priv->ring[ring].workqueue, > &priv->ring[ring].work_data.work); > > - wait_for_completion(&result.completion); > + err = crypto_wait_req(-EINPROGRESS, &result); > > - if (result.error) { > - dev_warn(priv->dev, "hash: completion error (%d)\n", > - result.error); > - return result.error; > + if (err) { > + dev_warn(priv->dev, "hash: completion error (%d)\n", err); > + return err; > } > > return 0; > -- > Email: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> > Home Page: http://gondor.apana.org.au/~herbert/ > PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt >