
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 5993386..b75cc99 100644 --- a/src/uadk_cipher.c +++ b/src/uadk_cipher.c @@ -516,7 +516,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; @@ -529,18 +529,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 018a3b6..4127d48 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 278ffda..fff0a75 100644 --- a/src/uadk_digest.c +++ b/src/uadk_digest.c @@ -342,7 +342,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; @@ -355,6 +355,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; @@ -362,11 +363,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 9dfffac..d784b01 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 42c3506..9de1b9d 100644 --- a/src/uadk_rsa.c +++ b/src/uadk_rsa.c @@ -665,7 +665,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; @@ -691,6 +691,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; @@ -698,11 +699,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.30.0