|
Torsten Duwe |
734bc6 |
From af88d3c109aa5edfaa11c9a26d9c0ff21ddf501c Mon Sep 17 00:00:00 2001
|
|
Torsten Duwe |
734bc6 |
From: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
734bc6 |
Date: Mon, 9 May 2022 14:34:09 +0100
|
|
Torsten Duwe |
734bc6 |
Subject: [PATCH] crypto: qat - refactor submission logic
|
|
Torsten Duwe |
734bc6 |
Git-commit: af88d3c109aa5edfaa11c9a26d9c0ff21ddf501c
|
|
Torsten Duwe |
734bc6 |
Patch-mainline: v5.19-rc1
|
|
Torsten Duwe |
734bc6 |
References: jsc#PED-1073
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
All the algorithms in qat_algs.c and qat_asym_algs.c use the same
|
|
Torsten Duwe |
734bc6 |
pattern to submit messages to the HW queues. Move the submission loop
|
|
Torsten Duwe |
734bc6 |
to a new function, qat_alg_send_message(), and share it between the
|
|
Torsten Duwe |
734bc6 |
symmetric and the asymmetric algorithms.
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
As part of this rework, since the number of retries before returning an
|
|
Torsten Duwe |
734bc6 |
error is inconsistent between the symmetric and asymmetric
|
|
Torsten Duwe |
734bc6 |
implementations, set it to a value that works for both (i.e. 20, was 10
|
|
Torsten Duwe |
734bc6 |
in qat_algs.c and 100 in qat_asym_algs.c)
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
In addition fix the return code reported when the HW queues are full.
|
|
Torsten Duwe |
734bc6 |
In that case return -ENOSPC instead of -EBUSY.
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
Including stable in CC since (1) the error code returned if the HW queues
|
|
Torsten Duwe |
734bc6 |
are full is incorrect and (2) to facilitate the backport of the next fix
|
|
Torsten Duwe |
734bc6 |
"crypto: qat - add backlog mechanism".
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
Cc: stable@vger.kernel.org
|
|
Torsten Duwe |
734bc6 |
Signed-off-by: Giovanni Cabiddu <giovanni.cabiddu@intel.com>
|
|
Torsten Duwe |
734bc6 |
Reviewed-by: Marco Chiappero <marco.chiappero@intel.com>
|
|
Torsten Duwe |
734bc6 |
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
|
|
Torsten Duwe |
734bc6 |
Signed-off-by: Torsten Duwe <duwe@suse.de>
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
---
|
|
Torsten Duwe |
734bc6 |
drivers/crypto/qat/qat_common/Makefile | 1 +
|
|
Torsten Duwe |
734bc6 |
drivers/crypto/qat/qat_common/qat_algs.c | 68 +++++++++----------
|
|
Torsten Duwe |
734bc6 |
drivers/crypto/qat/qat_common/qat_algs_send.c | 21 ++++++
|
|
Torsten Duwe |
734bc6 |
drivers/crypto/qat/qat_common/qat_algs_send.h | 10 +++
|
|
Torsten Duwe |
734bc6 |
drivers/crypto/qat/qat_common/qat_asym_algs.c | 50 +++++++++-----
|
|
Torsten Duwe |
734bc6 |
drivers/crypto/qat/qat_common/qat_crypto.h | 5 ++
|
|
Torsten Duwe |
734bc6 |
6 files changed, 101 insertions(+), 54 deletions(-)
|
|
Torsten Duwe |
734bc6 |
create mode 100644 drivers/crypto/qat/qat_common/qat_algs_send.c
|
|
Torsten Duwe |
734bc6 |
create mode 100644 drivers/crypto/qat/qat_common/qat_algs_send.h
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
diff --git a/drivers/crypto/qat/qat_common/Makefile b/drivers/crypto/qat/qat_common/Makefile
|
|
Torsten Duwe |
734bc6 |
index f25a6c8edfc73..04f058acc4d37 100644
|
|
Torsten Duwe |
734bc6 |
--- a/drivers/crypto/qat/qat_common/Makefile
|
|
Torsten Duwe |
734bc6 |
+++ b/drivers/crypto/qat/qat_common/Makefile
|
|
Torsten Duwe |
734bc6 |
@@ -16,6 +16,7 @@ intel_qat-objs := adf_cfg.o \
|
|
Torsten Duwe |
734bc6 |
qat_crypto.o \
|
|
Torsten Duwe |
734bc6 |
qat_algs.o \
|
|
Torsten Duwe |
734bc6 |
qat_asym_algs.o \
|
|
Torsten Duwe |
734bc6 |
+ qat_algs_send.o \
|
|
Torsten Duwe |
734bc6 |
qat_uclo.o \
|
|
Torsten Duwe |
734bc6 |
qat_hal.o
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
diff --git a/drivers/crypto/qat/qat_common/qat_algs.c b/drivers/crypto/qat/qat_common/qat_algs.c
|
|
Torsten Duwe |
734bc6 |
index ec635fe44c1f4..6017ae82c7133 100644
|
|
Torsten Duwe |
734bc6 |
--- a/drivers/crypto/qat/qat_common/qat_algs.c
|
|
Torsten Duwe |
734bc6 |
+++ b/drivers/crypto/qat/qat_common/qat_algs.c
|
|
Torsten Duwe |
734bc6 |
@@ -17,7 +17,7 @@
|
|
Torsten Duwe |
734bc6 |
#include <crypto/xts.h>
|
|
Torsten Duwe |
734bc6 |
#include <linux/dma-mapping.h>
|
|
Torsten Duwe |
734bc6 |
#include "adf_accel_devices.h"
|
|
Torsten Duwe |
734bc6 |
-#include "adf_transport.h"
|
|
Torsten Duwe |
734bc6 |
+#include "qat_algs_send.h"
|
|
Torsten Duwe |
734bc6 |
#include "adf_common_drv.h"
|
|
Torsten Duwe |
734bc6 |
#include "qat_crypto.h"
|
|
Torsten Duwe |
734bc6 |
#include "icp_qat_hw.h"
|
|
Torsten Duwe |
734bc6 |
@@ -939,6 +939,17 @@ void qat_alg_callback(void *resp)
|
|
Torsten Duwe |
734bc6 |
qat_req->cb(qat_resp, qat_req);
|
|
Torsten Duwe |
734bc6 |
}
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
+static int qat_alg_send_sym_message(struct qat_crypto_request *qat_req,
|
|
Torsten Duwe |
734bc6 |
+ struct qat_crypto_instance *inst)
|
|
Torsten Duwe |
734bc6 |
+{
|
|
Torsten Duwe |
734bc6 |
+ struct qat_alg_req req;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ req.fw_req = (u32 *)&qat_req->req;
|
|
Torsten Duwe |
734bc6 |
+ req.tx_ring = inst->sym_tx;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return qat_alg_send_message(&req;;
|
|
Torsten Duwe |
734bc6 |
+}
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
static int qat_alg_aead_dec(struct aead_request *areq)
|
|
Torsten Duwe |
734bc6 |
{
|
|
Torsten Duwe |
734bc6 |
struct crypto_aead *aead_tfm = crypto_aead_reqtfm(areq);
|
|
Torsten Duwe |
734bc6 |
@@ -949,7 +960,7 @@ static int qat_alg_aead_dec(struct aead_request *areq)
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_auth_req_params *auth_param;
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_bulk_req *msg;
|
|
Torsten Duwe |
734bc6 |
int digst_size = crypto_aead_authsize(aead_tfm);
|
|
Torsten Duwe |
734bc6 |
- int ret, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+ int ret;
|
|
Torsten Duwe |
734bc6 |
u32 cipher_len;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
cipher_len = areq->cryptlen - digst_size;
|
|
Torsten Duwe |
734bc6 |
@@ -975,15 +986,12 @@ static int qat_alg_aead_dec(struct aead_request *areq)
|
|
Torsten Duwe |
734bc6 |
auth_param = (void *)((u8 *)cipher_param + sizeof(*cipher_param));
|
|
Torsten Duwe |
734bc6 |
auth_param->auth_off = 0;
|
|
Torsten Duwe |
734bc6 |
auth_param->auth_len = areq->assoclen + cipher_param->cipher_length;
|
|
Torsten Duwe |
734bc6 |
- do {
|
|
Torsten Duwe |
734bc6 |
- ret = adf_send_message(ctx->inst->sym_tx, (u32 *)msg);
|
|
Torsten Duwe |
734bc6 |
- } while (ret == -EAGAIN && ctr++ < 10);
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- if (ret == -EAGAIN) {
|
|
Torsten Duwe |
734bc6 |
+ ret = qat_alg_send_sym_message(qat_req, ctx->inst);
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -ENOSPC)
|
|
Torsten Duwe |
734bc6 |
qat_alg_free_bufl(ctx->inst, qat_req);
|
|
Torsten Duwe |
734bc6 |
- return -EBUSY;
|
|
Torsten Duwe |
734bc6 |
- }
|
|
Torsten Duwe |
734bc6 |
- return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return ret;
|
|
Torsten Duwe |
734bc6 |
}
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
static int qat_alg_aead_enc(struct aead_request *areq)
|
|
Torsten Duwe |
734bc6 |
@@ -996,7 +1004,7 @@ static int qat_alg_aead_enc(struct aead_request *areq)
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_auth_req_params *auth_param;
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_bulk_req *msg;
|
|
Torsten Duwe |
734bc6 |
u8 *iv = areq->iv;
|
|
Torsten Duwe |
734bc6 |
- int ret, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+ int ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
if (areq->cryptlen % AES_BLOCK_SIZE != 0)
|
|
Torsten Duwe |
734bc6 |
return -EINVAL;
|
|
Torsten Duwe |
734bc6 |
@@ -1023,15 +1031,11 @@ static int qat_alg_aead_enc(struct aead_request *areq)
|
|
Torsten Duwe |
734bc6 |
auth_param->auth_off = 0;
|
|
Torsten Duwe |
734bc6 |
auth_param->auth_len = areq->assoclen + areq->cryptlen;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- do {
|
|
Torsten Duwe |
734bc6 |
- ret = adf_send_message(ctx->inst->sym_tx, (u32 *)msg);
|
|
Torsten Duwe |
734bc6 |
- } while (ret == -EAGAIN && ctr++ < 10);
|
|
Torsten Duwe |
734bc6 |
-
|
|
Torsten Duwe |
734bc6 |
- if (ret == -EAGAIN) {
|
|
Torsten Duwe |
734bc6 |
+ ret = qat_alg_send_sym_message(qat_req, ctx->inst);
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -ENOSPC)
|
|
Torsten Duwe |
734bc6 |
qat_alg_free_bufl(ctx->inst, qat_req);
|
|
Torsten Duwe |
734bc6 |
- return -EBUSY;
|
|
Torsten Duwe |
734bc6 |
- }
|
|
Torsten Duwe |
734bc6 |
- return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return ret;
|
|
Torsten Duwe |
734bc6 |
}
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
static int qat_alg_skcipher_rekey(struct qat_alg_skcipher_ctx *ctx,
|
|
Torsten Duwe |
734bc6 |
@@ -1184,7 +1188,7 @@ static int qat_alg_skcipher_encrypt(struct skcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
struct qat_crypto_request *qat_req = skcipher_request_ctx(req);
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_cipher_req_params *cipher_param;
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_bulk_req *msg;
|
|
Torsten Duwe |
734bc6 |
- int ret, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+ int ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
if (req->cryptlen == 0)
|
|
Torsten Duwe |
734bc6 |
return 0;
|
|
Torsten Duwe |
734bc6 |
@@ -1208,15 +1212,11 @@ static int qat_alg_skcipher_encrypt(struct skcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
qat_alg_set_req_iv(qat_req);
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- do {
|
|
Torsten Duwe |
734bc6 |
- ret = adf_send_message(ctx->inst->sym_tx, (u32 *)msg);
|
|
Torsten Duwe |
734bc6 |
- } while (ret == -EAGAIN && ctr++ < 10);
|
|
Torsten Duwe |
734bc6 |
-
|
|
Torsten Duwe |
734bc6 |
- if (ret == -EAGAIN) {
|
|
Torsten Duwe |
734bc6 |
+ ret = qat_alg_send_sym_message(qat_req, ctx->inst);
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -ENOSPC)
|
|
Torsten Duwe |
734bc6 |
qat_alg_free_bufl(ctx->inst, qat_req);
|
|
Torsten Duwe |
734bc6 |
- return -EBUSY;
|
|
Torsten Duwe |
734bc6 |
- }
|
|
Torsten Duwe |
734bc6 |
- return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return ret;
|
|
Torsten Duwe |
734bc6 |
}
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
static int qat_alg_skcipher_blk_encrypt(struct skcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
@@ -1253,7 +1253,7 @@ static int qat_alg_skcipher_decrypt(struct skcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
struct qat_crypto_request *qat_req = skcipher_request_ctx(req);
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_cipher_req_params *cipher_param;
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_la_bulk_req *msg;
|
|
Torsten Duwe |
734bc6 |
- int ret, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+ int ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
if (req->cryptlen == 0)
|
|
Torsten Duwe |
734bc6 |
return 0;
|
|
Torsten Duwe |
734bc6 |
@@ -1278,15 +1278,11 @@ static int qat_alg_skcipher_decrypt(struct skcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
qat_alg_set_req_iv(qat_req);
|
|
Torsten Duwe |
734bc6 |
qat_alg_update_iv(qat_req);
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- do {
|
|
Torsten Duwe |
734bc6 |
- ret = adf_send_message(ctx->inst->sym_tx, (u32 *)msg);
|
|
Torsten Duwe |
734bc6 |
- } while (ret == -EAGAIN && ctr++ < 10);
|
|
Torsten Duwe |
734bc6 |
-
|
|
Torsten Duwe |
734bc6 |
- if (ret == -EAGAIN) {
|
|
Torsten Duwe |
734bc6 |
+ ret = qat_alg_send_sym_message(qat_req, ctx->inst);
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -ENOSPC)
|
|
Torsten Duwe |
734bc6 |
qat_alg_free_bufl(ctx->inst, qat_req);
|
|
Torsten Duwe |
734bc6 |
- return -EBUSY;
|
|
Torsten Duwe |
734bc6 |
- }
|
|
Torsten Duwe |
734bc6 |
- return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return ret;
|
|
Torsten Duwe |
734bc6 |
}
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
static int qat_alg_skcipher_blk_decrypt(struct skcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
diff --git a/drivers/crypto/qat/qat_common/qat_algs_send.c b/drivers/crypto/qat/qat_common/qat_algs_send.c
|
|
Torsten Duwe |
734bc6 |
new file mode 100644
|
|
Torsten Duwe |
734bc6 |
index 0000000000000..78f1bb8c26c08
|
|
Torsten Duwe |
734bc6 |
--- /dev/null
|
|
Torsten Duwe |
734bc6 |
+++ b/drivers/crypto/qat/qat_common/qat_algs_send.c
|
|
Torsten Duwe |
734bc6 |
@@ -0,0 +1,21 @@
|
|
Torsten Duwe |
734bc6 |
+// SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only)
|
|
Torsten Duwe |
734bc6 |
+/* Copyright(c) 2022 Intel Corporation */
|
|
Torsten Duwe |
734bc6 |
+#include "adf_transport.h"
|
|
Torsten Duwe |
734bc6 |
+#include "qat_algs_send.h"
|
|
Torsten Duwe |
734bc6 |
+#include "qat_crypto.h"
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+#define ADF_MAX_RETRIES 20
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+int qat_alg_send_message(struct qat_alg_req *req)
|
|
Torsten Duwe |
734bc6 |
+{
|
|
Torsten Duwe |
734bc6 |
+ int ret = 0, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ do {
|
|
Torsten Duwe |
734bc6 |
+ ret = adf_send_message(req->tx_ring, req->fw_req);
|
|
Torsten Duwe |
734bc6 |
+ } while (ret == -EAGAIN && ctr++ < ADF_MAX_RETRIES);
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -EAGAIN)
|
|
Torsten Duwe |
734bc6 |
+ return -ENOSPC;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+}
|
|
Torsten Duwe |
734bc6 |
diff --git a/drivers/crypto/qat/qat_common/qat_algs_send.h b/drivers/crypto/qat/qat_common/qat_algs_send.h
|
|
Torsten Duwe |
734bc6 |
new file mode 100644
|
|
Torsten Duwe |
734bc6 |
index 0000000000000..3fa685d0c293a
|
|
Torsten Duwe |
734bc6 |
--- /dev/null
|
|
Torsten Duwe |
734bc6 |
+++ b/drivers/crypto/qat/qat_common/qat_algs_send.h
|
|
Torsten Duwe |
734bc6 |
@@ -0,0 +1,10 @@
|
|
Torsten Duwe |
734bc6 |
+/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0-only) */
|
|
Torsten Duwe |
734bc6 |
+/* Copyright(c) 2022 Intel Corporation */
|
|
Torsten Duwe |
734bc6 |
+#ifndef QAT_ALGS_SEND_H
|
|
Torsten Duwe |
734bc6 |
+#define QAT_ALGS_SEND_H
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+#include "qat_crypto.h"
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+int qat_alg_send_message(struct qat_alg_req *req);
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+#endif
|
|
Torsten Duwe |
734bc6 |
diff --git a/drivers/crypto/qat/qat_common/qat_asym_algs.c b/drivers/crypto/qat/qat_common/qat_asym_algs.c
|
|
Torsten Duwe |
734bc6 |
index 5633f9df3b6fe..08b8d83e070a0 100644
|
|
Torsten Duwe |
734bc6 |
--- a/drivers/crypto/qat/qat_common/qat_asym_algs.c
|
|
Torsten Duwe |
734bc6 |
+++ b/drivers/crypto/qat/qat_common/qat_asym_algs.c
|
|
Torsten Duwe |
734bc6 |
@@ -12,6 +12,7 @@
|
|
Torsten Duwe |
734bc6 |
#include <crypto/scatterwalk.h>
|
|
Torsten Duwe |
734bc6 |
#include "icp_qat_fw_pke.h"
|
|
Torsten Duwe |
734bc6 |
#include "adf_accel_devices.h"
|
|
Torsten Duwe |
734bc6 |
+#include "qat_algs_send.h"
|
|
Torsten Duwe |
734bc6 |
#include "adf_transport.h"
|
|
Torsten Duwe |
734bc6 |
#include "adf_common_drv.h"
|
|
Torsten Duwe |
734bc6 |
#include "qat_crypto.h"
|
|
Torsten Duwe |
734bc6 |
@@ -137,6 +138,17 @@ struct qat_asym_request {
|
|
Torsten Duwe |
734bc6 |
void (*cb)(struct icp_qat_fw_pke_resp *resp);
|
|
Torsten Duwe |
734bc6 |
} __aligned(64);
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
+static int qat_alg_send_asym_message(struct qat_asym_request *qat_req,
|
|
Torsten Duwe |
734bc6 |
+ struct qat_crypto_instance *inst)
|
|
Torsten Duwe |
734bc6 |
+{
|
|
Torsten Duwe |
734bc6 |
+ struct qat_alg_req req;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ req.fw_req = (u32 *)&qat_req->req;
|
|
Torsten Duwe |
734bc6 |
+ req.tx_ring = inst->pke_tx;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return qat_alg_send_message(&req;;
|
|
Torsten Duwe |
734bc6 |
+}
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
static void qat_dh_cb(struct icp_qat_fw_pke_resp *resp)
|
|
Torsten Duwe |
734bc6 |
{
|
|
Torsten Duwe |
734bc6 |
struct qat_asym_request *req = (void *)(__force long)resp->opaque;
|
|
Torsten Duwe |
734bc6 |
@@ -213,7 +225,7 @@ static int qat_dh_compute_value(struct kpp_request *req)
|
|
Torsten Duwe |
734bc6 |
struct qat_asym_request *qat_req =
|
|
Torsten Duwe |
734bc6 |
PTR_ALIGN(kpp_request_ctx(req), 64);
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_pke_request *msg = &qat_req->req;
|
|
Torsten Duwe |
734bc6 |
- int ret, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+ int ret;
|
|
Torsten Duwe |
734bc6 |
int n_input_params = 0;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
if (unlikely(!ctx->xa))
|
|
Torsten Duwe |
734bc6 |
@@ -338,13 +350,13 @@ static int qat_dh_compute_value(struct kpp_request *req)
|
|
Torsten Duwe |
734bc6 |
msg->input_param_count = n_input_params;
|
|
Torsten Duwe |
734bc6 |
msg->output_param_count = 1;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- do {
|
|
Torsten Duwe |
734bc6 |
- ret = adf_send_message(ctx->inst->pke_tx, (u32 *)msg);
|
|
Torsten Duwe |
734bc6 |
- } while (ret == -EBUSY && ctr++ < 100);
|
|
Torsten Duwe |
734bc6 |
+ ret = qat_alg_send_asym_message(qat_req, ctx->inst);
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -ENOSPC)
|
|
Torsten Duwe |
734bc6 |
+ goto unmap_all;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- if (!ret)
|
|
Torsten Duwe |
734bc6 |
- return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+ return ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
+unmap_all:
|
|
Torsten Duwe |
734bc6 |
if (!dma_mapping_error(dev, qat_req->phy_out))
|
|
Torsten Duwe |
734bc6 |
dma_unmap_single(dev, qat_req->phy_out,
|
|
Torsten Duwe |
734bc6 |
sizeof(struct qat_dh_output_params),
|
|
Torsten Duwe |
734bc6 |
@@ -645,7 +657,7 @@ static int qat_rsa_enc(struct akcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
struct qat_asym_request *qat_req =
|
|
Torsten Duwe |
734bc6 |
PTR_ALIGN(akcipher_request_ctx(req), 64);
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_pke_request *msg = &qat_req->req;
|
|
Torsten Duwe |
734bc6 |
- int ret, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+ int ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
if (unlikely(!ctx->n || !ctx->e))
|
|
Torsten Duwe |
734bc6 |
return -EINVAL;
|
|
Torsten Duwe |
734bc6 |
@@ -735,13 +747,14 @@ static int qat_rsa_enc(struct akcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
msg->pke_mid.opaque = (u64)(__force long)qat_req;
|
|
Torsten Duwe |
734bc6 |
msg->input_param_count = 3;
|
|
Torsten Duwe |
734bc6 |
msg->output_param_count = 1;
|
|
Torsten Duwe |
734bc6 |
- do {
|
|
Torsten Duwe |
734bc6 |
- ret = adf_send_message(ctx->inst->pke_tx, (u32 *)msg);
|
|
Torsten Duwe |
734bc6 |
- } while (ret == -EBUSY && ctr++ < 100);
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- if (!ret)
|
|
Torsten Duwe |
734bc6 |
- return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+ ret = qat_alg_send_asym_message(qat_req, ctx->inst);
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -ENOSPC)
|
|
Torsten Duwe |
734bc6 |
+ goto unmap_all;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
+unmap_all:
|
|
Torsten Duwe |
734bc6 |
if (!dma_mapping_error(dev, qat_req->phy_out))
|
|
Torsten Duwe |
734bc6 |
dma_unmap_single(dev, qat_req->phy_out,
|
|
Torsten Duwe |
734bc6 |
sizeof(struct qat_rsa_output_params),
|
|
Torsten Duwe |
734bc6 |
@@ -779,7 +792,7 @@ static int qat_rsa_dec(struct akcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
struct qat_asym_request *qat_req =
|
|
Torsten Duwe |
734bc6 |
PTR_ALIGN(akcipher_request_ctx(req), 64);
|
|
Torsten Duwe |
734bc6 |
struct icp_qat_fw_pke_request *msg = &qat_req->req;
|
|
Torsten Duwe |
734bc6 |
- int ret, ctr = 0;
|
|
Torsten Duwe |
734bc6 |
+ int ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
if (unlikely(!ctx->n || !ctx->d))
|
|
Torsten Duwe |
734bc6 |
return -EINVAL;
|
|
Torsten Duwe |
734bc6 |
@@ -887,13 +900,14 @@ static int qat_rsa_dec(struct akcipher_request *req)
|
|
Torsten Duwe |
734bc6 |
msg->input_param_count = 3;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
msg->output_param_count = 1;
|
|
Torsten Duwe |
734bc6 |
- do {
|
|
Torsten Duwe |
734bc6 |
- ret = adf_send_message(ctx->inst->pke_tx, (u32 *)msg);
|
|
Torsten Duwe |
734bc6 |
- } while (ret == -EBUSY && ctr++ < 100);
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
- if (!ret)
|
|
Torsten Duwe |
734bc6 |
- return -EINPROGRESS;
|
|
Torsten Duwe |
734bc6 |
+ ret = qat_alg_send_asym_message(qat_req, ctx->inst);
|
|
Torsten Duwe |
734bc6 |
+ if (ret == -ENOSPC)
|
|
Torsten Duwe |
734bc6 |
+ goto unmap_all;
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
+ return ret;
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
+unmap_all:
|
|
Torsten Duwe |
734bc6 |
if (!dma_mapping_error(dev, qat_req->phy_out))
|
|
Torsten Duwe |
734bc6 |
dma_unmap_single(dev, qat_req->phy_out,
|
|
Torsten Duwe |
734bc6 |
sizeof(struct qat_rsa_output_params),
|
|
Torsten Duwe |
734bc6 |
diff --git a/drivers/crypto/qat/qat_common/qat_crypto.h b/drivers/crypto/qat/qat_common/qat_crypto.h
|
|
Torsten Duwe |
734bc6 |
index 0928f159ea993..0dcba6fc358c9 100644
|
|
Torsten Duwe |
734bc6 |
--- a/drivers/crypto/qat/qat_common/qat_crypto.h
|
|
Torsten Duwe |
734bc6 |
+++ b/drivers/crypto/qat/qat_common/qat_crypto.h
|
|
Torsten Duwe |
734bc6 |
@@ -9,6 +9,11 @@
|
|
Torsten Duwe |
734bc6 |
#include "adf_accel_devices.h"
|
|
Torsten Duwe |
734bc6 |
#include "icp_qat_fw_la.h"
|
|
Torsten Duwe |
734bc6 |
|
|
Torsten Duwe |
734bc6 |
+struct qat_alg_req {
|
|
Torsten Duwe |
734bc6 |
+ u32 *fw_req;
|
|
Torsten Duwe |
734bc6 |
+ struct adf_etr_ring_data *tx_ring;
|
|
Torsten Duwe |
734bc6 |
+};
|
|
Torsten Duwe |
734bc6 |
+
|
|
Torsten Duwe |
734bc6 |
struct qat_crypto_instance {
|
|
Torsten Duwe |
734bc6 |
struct adf_etr_ring_data *sym_tx;
|
|
Torsten Duwe |
734bc6 |
struct adf_etr_ring_data *sym_rx;
|
|
Torsten Duwe |
734bc6 |
--
|
|
Torsten Duwe |
734bc6 |
2.35.3
|
|
Torsten Duwe |
734bc6 |
|