libwd/0054-uadk-sec-fix-hisi_sec_digest_send.patch
Yang Shen aa2d7cce3f libwd: backport for uadk from 2.3.24 to 2.3.27
Update some patch for uadk from mainline.
To get more infomation, please visit the homepage:
https://github.com/Linaro/uadk

Signed-off-by: Yang Shen <shenyang39@huawei.com>
2022-02-21 06:32:14 +00:00

166 lines
4.4 KiB
Diff

From c7d657b037cb9a37daaa3df79ac806e6ac1d4fa2 Mon Sep 17 00:00:00 2001
From: Wenkai Lin <linwenkai6@hisilicon.com>
Date: Tue, 15 Feb 2022 11:49:51 +0800
Subject: [PATCH 58/64] uadk: sec: fix hisi_sec_digest_send
When digest send a sgl format message, it will use
hisi_sec_fill_sgl to get sgl memory from sgl memory pool,
when send message exit abnormally, sgl should be put back.
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
---
drv/hisi_sec.c | 58 +++++++++++++++++++++-----------------------------
1 file changed, 24 insertions(+), 34 deletions(-)
diff --git a/drv/hisi_sec.c b/drv/hisi_sec.c
index 338823b..7f5aae2 100644
--- a/drv/hisi_sec.c
+++ b/drv/hisi_sec.c
@@ -929,10 +929,8 @@ int hisi_sec_cipher_send(handle_t ctx, struct wd_cipher_msg *msg)
if (msg->data_fmt == WD_SGL_BUF) {
ret = hisi_sec_fill_sgl(h_qp, &msg->in, &msg->out, &sqe,
msg->alg_type);
- if (ret) {
- WD_ERR("failed to get sgl!\n");
+ if (ret)
return ret;
- }
}
sqe.type2.clen_ivhlen |= (__u32)msg->in_bytes;
@@ -1132,10 +1130,8 @@ int hisi_sec_cipher_send_v3(handle_t ctx, struct wd_cipher_msg *msg)
if (msg->data_fmt == WD_SGL_BUF) {
ret = hisi_sec_fill_sgl_v3(h_qp, &msg->in, &msg->out, &sqe,
msg->alg_type);
- if (ret) {
- WD_ERR("failed to get sgl!\n");
+ if (ret)
return ret;
- }
}
sqe.c_len_ivin = (__u32)msg->in_bytes;
@@ -1360,10 +1356,8 @@ int hisi_sec_digest_send(handle_t ctx, struct wd_digest_msg *msg)
if (msg->data_fmt == WD_SGL_BUF) {
ret = hisi_sec_fill_sgl(h_qp, &msg->in, &msg->out, &sqe,
msg->alg_type);
- if (ret) {
- WD_ERR("failed to get sgl!\n");
+ if (ret)
return ret;
- }
}
sqe.sds_sa_type |= (__u8)(de | scene);
@@ -1372,10 +1366,8 @@ int hisi_sec_digest_send(handle_t ctx, struct wd_digest_msg *msg)
sqe.type2.mac_addr = (__u64)(uintptr_t)msg->out;
ret = fill_digest_bd2_alg(msg, &sqe);
- if (ret) {
- WD_ERR("failed to fill digest bd alg!\n");
- return ret;
- }
+ if (ret)
+ goto put_sgl;
qm_fill_digest_long_bd(msg, &sqe);
@@ -1390,15 +1382,18 @@ int hisi_sec_digest_send(handle_t ctx, struct wd_digest_msg *msg)
if (ret != -WD_EBUSY)
WD_ERR("digest send sqe is err(%d)!\n", ret);
- if (msg->data_fmt == WD_SGL_BUF)
- hisi_sec_put_sgl(h_qp, msg->alg_type, msg->in, msg->out);
-
- return ret;
+ goto put_sgl;
}
hisi_qm_enable_interrupt(ctx, msg->is_polled);
return 0;
+
+put_sgl:
+ if (msg->data_fmt == WD_SGL_BUF)
+ hisi_sec_put_sgl(h_qp, msg->alg_type, msg->in, msg->out);
+
+ return ret;
}
int hisi_sec_digest_recv(handle_t ctx, struct wd_digest_msg *recv_msg)
@@ -1517,10 +1512,8 @@ int hisi_sec_digest_send_v3(handle_t ctx, struct wd_digest_msg *msg)
if (msg->data_fmt == WD_SGL_BUF) {
ret = hisi_sec_fill_sgl_v3(h_qp, &msg->in, &msg->out, &sqe,
msg->alg_type);
- if (ret) {
- WD_ERR("failed to get sgl!\n");
+ if (ret)
return ret;
- }
}
sqe.bd_param |= (__u16)(de | scene);
@@ -1529,10 +1522,8 @@ int hisi_sec_digest_send_v3(handle_t ctx, struct wd_digest_msg *msg)
sqe.mac_addr = (__u64)(uintptr_t)msg->out;
ret = fill_digest_bd3_alg(msg, &sqe);
- if (ret) {
- WD_ERR("failed to fill digest bd alg!\n");
- return ret;
- }
+ if (ret)
+ goto put_sgl;
qm_fill_digest_long_bd3(msg, &sqe);
@@ -1548,15 +1539,18 @@ int hisi_sec_digest_send_v3(handle_t ctx, struct wd_digest_msg *msg)
if (ret != -WD_EBUSY)
WD_ERR("digest send sqe is err(%d)!\n", ret);
- if (msg->data_fmt == WD_SGL_BUF)
- hisi_sec_put_sgl(h_qp, msg->alg_type, msg->in, msg->out);
-
- return ret;
+ goto put_sgl;
}
hisi_qm_enable_interrupt(ctx, msg->is_polled);
return 0;
+
+put_sgl:
+ if (msg->data_fmt == WD_SGL_BUF)
+ hisi_sec_put_sgl(h_qp, msg->alg_type, msg->in, msg->out);
+
+ return ret;
}
static void parse_digest_bd3(struct hisi_sec_sqe3 *sqe,
@@ -1873,10 +1867,8 @@ int hisi_sec_aead_send(handle_t ctx, struct wd_aead_msg *msg)
if (msg->data_fmt == WD_SGL_BUF) {
ret = hisi_sec_fill_sgl(h_qp, &msg->in, &msg->out, &sqe, msg->alg_type);
- if (ret) {
- WD_ERR("failed to get sgl!\n");
+ if (ret)
return ret;
- }
}
fill_aead_bd2_addr(msg, &sqe);
@@ -2141,10 +2133,8 @@ int hisi_sec_aead_send_v3(handle_t ctx, struct wd_aead_msg *msg)
if (msg->data_fmt == WD_SGL_BUF) {
ret = hisi_sec_fill_sgl_v3(h_qp, &msg->in, &msg->out, &sqe,
msg->alg_type);
- if (ret) {
- WD_ERR("failed to get sgl!\n");
+ if (ret)
return ret;
- }
}
fill_aead_bd3_addr(msg, &sqe);
--
2.25.1