Update some patch for uadk_engine from mainline. Signed-off-by: Yang Shen <shenyang39@huawei.com> (cherry picked from commit 6ae4d8c0999343eddb153c4e4e879a6b66ef528f)
213 lines
5.3 KiB
Diff
213 lines
5.3 KiB
Diff
From ba0a9ede4f72387f065e88c054e35dc6fdb59079 Mon Sep 17 00:00:00 2001
|
|
From: Zhiqi Song <songzhiqi1@huawei.com>
|
|
Date: Sat, 23 Jul 2022 17:10:47 +0800
|
|
Subject: [PATCH 50/57] uadk_engine: add timeout protection mechanism in poll
|
|
|
|
Count the cycle times of poll. When the count times exceed the
|
|
maximum number, exit to prevent the task from timeout.
|
|
|
|
Signed-off-by: Zhiqi Song <songzhiqi1@huawei.com>
|
|
---
|
|
src/uadk_cipher.c | 13 ++++++++-----
|
|
src/uadk_dh.c | 11 +++++++----
|
|
src/uadk_digest.c | 11 +++++++----
|
|
src/uadk_pkey.c | 13 ++++++++-----
|
|
src/uadk_rsa.c | 11 +++++++----
|
|
5 files changed, 37 insertions(+), 22 deletions(-)
|
|
|
|
diff --git a/src/uadk_cipher.c b/src/uadk_cipher.c
|
|
index 472c0ad..54d0a7d 100644
|
|
--- a/src/uadk_cipher.c
|
|
+++ b/src/uadk_cipher.c
|
|
@@ -517,7 +517,7 @@ static int uadk_e_cipher_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_cipher_poll_ctx(idx, expt, &recv);
|
|
- if (recv >= expt)
|
|
+ if (recv == expt)
|
|
return 0;
|
|
else if (ret < 0 && ret != -EAGAIN)
|
|
return ret;
|
|
@@ -530,18 +530,21 @@ static int uadk_e_cipher_poll(void *ctx)
|
|
|
|
static int uadk_e_cipher_env_poll(void *ctx)
|
|
{
|
|
+ __u64 rx_cnt = 0;
|
|
__u32 recv = 0;
|
|
- /* poll one packet currently */
|
|
+ /* Poll one packet currently */
|
|
int expt = 1;
|
|
int ret;
|
|
|
|
do {
|
|
ret = wd_cipher_poll(expt, &recv);
|
|
- if (ret < 0)
|
|
+ if (ret < 0 || recv == expt)
|
|
return ret;
|
|
- } while (recv < expt);
|
|
+ } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
|
|
|
- return ret;
|
|
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
|
+
|
|
+ return -ETIMEDOUT;
|
|
}
|
|
|
|
static int uadk_e_wd_cipher_env_init(struct uacce_dev *dev)
|
|
diff --git a/src/uadk_dh.c b/src/uadk_dh.c
|
|
index 893b0f2..cf319e5 100644
|
|
--- a/src/uadk_dh.c
|
|
+++ b/src/uadk_dh.c
|
|
@@ -212,7 +212,7 @@ static int uadk_e_dh_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_dh_poll_ctx(idx, expect, &recv);
|
|
- if (recv >= expect)
|
|
+ if (recv == expect)
|
|
return UADK_E_POLL_SUCCESS;
|
|
else if (ret < 0 && ret != -EAGAIN)
|
|
return ret;
|
|
@@ -273,6 +273,7 @@ static struct dh_res_config dh_res_config = {
|
|
|
|
static int uadk_e_dh_env_poll(void *ctx)
|
|
{
|
|
+ __u64 rx_cnt = 0;
|
|
__u32 recv = 0;
|
|
/* Poll one packet currently */
|
|
int expt = 1;
|
|
@@ -280,11 +281,13 @@ static int uadk_e_dh_env_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_dh_poll(expt, &recv);
|
|
- if (ret < 0)
|
|
+ if (ret < 0 || recv == expt)
|
|
return ret;
|
|
- } while (recv < expt);
|
|
+ } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
|
|
|
- return ret;
|
|
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
|
+
|
|
+ return -ETIMEDOUT;
|
|
}
|
|
|
|
static int uadk_e_wd_dh_env_init(struct uacce_dev *dev)
|
|
diff --git a/src/uadk_digest.c b/src/uadk_digest.c
|
|
index 8127373..853aa39 100644
|
|
--- a/src/uadk_digest.c
|
|
+++ b/src/uadk_digest.c
|
|
@@ -343,7 +343,7 @@ static int uadk_e_digest_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_digest_poll_ctx(CTX_ASYNC, expt, &recv);
|
|
- if (recv >= expt)
|
|
+ if (recv == expt)
|
|
return 0;
|
|
else if (ret < 0 && ret != -EAGAIN)
|
|
return ret;
|
|
@@ -356,6 +356,7 @@ static int uadk_e_digest_poll(void *ctx)
|
|
|
|
static int uadk_e_digest_env_poll(void *ctx)
|
|
{
|
|
+ __u64 rx_cnt = 0;
|
|
__u32 recv = 0;
|
|
/* Poll one packet currently */
|
|
int expt = 1;
|
|
@@ -363,11 +364,13 @@ static int uadk_e_digest_env_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_digest_poll(expt, &recv);
|
|
- if (ret < 0)
|
|
+ if (ret < 0 || recv == expt)
|
|
return ret;
|
|
- } while (recv < expt);
|
|
+ } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
|
|
|
- return ret;
|
|
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
|
+
|
|
+ return -ETIMEDOUT;
|
|
}
|
|
|
|
static int uadk_e_wd_digest_env_init(struct uacce_dev *dev)
|
|
diff --git a/src/uadk_pkey.c b/src/uadk_pkey.c
|
|
index a0b74af..9a3a725 100644
|
|
--- a/src/uadk_pkey.c
|
|
+++ b/src/uadk_pkey.c
|
|
@@ -110,7 +110,7 @@ static int uadk_ecc_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_ecc_poll_ctx(CTX_ASYNC, expt, &recv);
|
|
- if (recv >= expt)
|
|
+ if (recv == expt)
|
|
return 0;
|
|
else if (ret < 0 && ret != -EAGAIN)
|
|
return ret;
|
|
@@ -143,18 +143,21 @@ int uadk_e_ecc_get_numa_id(void)
|
|
|
|
static int uadk_e_ecc_env_poll(void *ctx)
|
|
{
|
|
+ __u64 rx_cnt = 0;
|
|
__u32 recv = 0;
|
|
- /* poll one packet currently */
|
|
+ /* Poll one packet currently */
|
|
int expt = 1;
|
|
int ret;
|
|
|
|
do {
|
|
ret = wd_ecc_poll(expt, &recv);
|
|
- if (ret < 0)
|
|
+ if (ret < 0 || recv == expt)
|
|
return ret;
|
|
- } while (recv < expt);
|
|
+ } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
|
|
|
- return ret;
|
|
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
|
+
|
|
+ return -ETIMEDOUT;
|
|
}
|
|
|
|
static int uadk_e_wd_ecc_env_init(struct uacce_dev *dev)
|
|
diff --git a/src/uadk_rsa.c b/src/uadk_rsa.c
|
|
index 29b2521..a74343f 100644
|
|
--- a/src/uadk_rsa.c
|
|
+++ b/src/uadk_rsa.c
|
|
@@ -663,7 +663,7 @@ static int uadk_e_rsa_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_rsa_poll_ctx(CTX_ASYNC, expt, &recv);
|
|
- if (recv >= expt)
|
|
+ if (recv == expt)
|
|
return UADK_E_POLL_SUCCESS;
|
|
else if (ret < 0 && ret != -EAGAIN)
|
|
return ret;
|
|
@@ -689,6 +689,7 @@ static struct rsa_res_config rsa_res_config = {
|
|
|
|
static int uadk_e_rsa_env_poll(void *ctx)
|
|
{
|
|
+ __u64 rx_cnt = 0;
|
|
__u32 recv = 0;
|
|
/* Poll one packet currently */
|
|
int expt = 1;
|
|
@@ -696,11 +697,13 @@ static int uadk_e_rsa_env_poll(void *ctx)
|
|
|
|
do {
|
|
ret = wd_rsa_poll(expt, &recv);
|
|
- if (ret < 0)
|
|
+ if (ret < 0 || recv == expt)
|
|
return ret;
|
|
- } while (recv < expt);
|
|
+ } while (rx_cnt++ < ENGINE_RECV_MAX_CNT);
|
|
|
|
- return ret;
|
|
+ fprintf(stderr, "failed to poll msg: timeout!\n");
|
|
+
|
|
+ return -ETIMEDOUT;
|
|
}
|
|
|
|
static int uadk_e_wd_rsa_env_init(struct uacce_dev *dev)
|
|
--
|
|
2.27.0
|
|
|