From 0d65963667c4795a28701e5a212422ebcff27c74 Mon Sep 17 00:00:00 2001 From: Kai Ye Date: Thu, 23 Dec 2021 15:40:15 +0800 Subject: [PATCH 10/28] digest: some optimizations for digest stream mode 1. add some comments for session state. 2. The stream status is set only when the last msg message is successfully received. Signed-off-by: Kai Ye --- wd_digest.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/wd_digest.c b/wd_digest.c index 1962f09..bbb258f 100644 --- a/wd_digest.c +++ b/wd_digest.c @@ -21,6 +21,7 @@ #define POLL_SIZE 100000 #define POLL_TIME 1000 +#define STREAM_MODE_STATE 1 static int g_digest_mac_len[WD_DIGEST_TYPE_MAX] = { WD_DIGEST_SM3_LEN, WD_DIGEST_MD5_LEN, WD_DIGEST_SHA1_LEN, @@ -46,8 +47,11 @@ struct wd_digest_sess { unsigned char key[MAX_HMAC_KEY_SIZE]; __u32 key_bytes; void *sched_key; - /* Notify the BD state */ - int state; + /* + * Notify the BD state, 1 is final BD or middle BD, + * 0 is normal mode or first BD, one session only supports one stream. + */ + int state; /* Total of data for stream mode */ __u64 long_data_len; }; @@ -294,7 +298,7 @@ static void fill_request_msg(struct wd_digest_msg *msg, msg->has_next = req->has_next; sess->long_data_len += req->in_bytes; msg->long_data_len = sess->long_data_len; - /* To store the stream bd state */ + /* To store the stream bd state, iv_bytes also means bd state */ msg->iv_bytes = sess->state; if (req->has_next == 0) { sess->long_data_len = 0; @@ -332,8 +336,8 @@ static int send_recv_sync(struct wd_ctx_internal *ctx, struct wd_digest_sess *ds goto out; } } - if (msg->has_next) - dsess->state = msg->out_bytes; + if (msg->has_next && msg->result == WD_SUCCESS) + dsess->state = STREAM_MODE_STATE; } while (ret < 0); out: -- 2.31.1