libwd/0062-uadk-tools-fix-for-uadk-tool-sec-aead-async-mode.patch
2023-11-23 10:41:04 +08:00

186 lines
5.6 KiB
Diff

From f4adc9ff84c39def8c82a6976e7c62d2c79c5363 Mon Sep 17 00:00:00 2001
From: Wenkai Lin <linwenkai6@hisilicon.com>
Date: Fri, 10 Nov 2023 11:52:31 +0800
Subject: [PATCH 62/85] uadk/tools: fix for uadk tool sec aead async mode
In asynchronous mode, each BD of each thread requires an
independent MAC address. Otherwise, hardware write-back
overwrites each other.
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
---
uadk_tool/benchmark/sec_uadk_benchmark.c | 43 +++++++-----------------
1 file changed, 13 insertions(+), 30 deletions(-)
diff --git a/uadk_tool/benchmark/sec_uadk_benchmark.c b/uadk_tool/benchmark/sec_uadk_benchmark.c
index aed1b26..d0bf871 100644
--- a/uadk_tool/benchmark/sec_uadk_benchmark.c
+++ b/uadk_tool/benchmark/sec_uadk_benchmark.c
@@ -28,6 +28,7 @@ char g_save_mac[SEC_MAX_MAC_LEN];
struct uadk_bd {
u8 *src;
u8 *dst;
+ u8 mac[SEC_MAX_MAC_LEN];
};
struct bd_pool {
@@ -38,7 +39,6 @@ struct thread_pool {
struct bd_pool *pool;
u8 **iv;
u8 **key;
- u8 **mac;
u8 **hash;
} g_uadk_pool;
@@ -602,7 +602,7 @@ static void save_aead_dst_data(u8 *addr, u32 size)
return;
}
- memcpy(addr + size, g_uadk_pool.mac[0], SEC_PERF_AUTH_SIZE);
+ memcpy(addr + size, g_uadk_pool.pool[0].bds[0].mac, SEC_PERF_AUTH_SIZE);
for (int i = 0; i < size + SEC_PERF_AUTH_SIZE; i++)
fputc((char)addr[i], fp);
@@ -645,7 +645,7 @@ static void read_aead_dst_data(u8 *addr, u32 len)
static int init_ivkey_source(void)
{
- int i, j, k, m, idx;
+ int i, j, m, idx;
g_uadk_pool.iv = malloc(sizeof(char *) * g_thread_num);
for (i = 0; i < g_thread_num; i++) {
@@ -663,13 +663,6 @@ static int init_ivkey_source(void)
memcpy(g_uadk_pool.key[j], aead_key, SEC_PERF_KEY_LEN);
}
- g_uadk_pool.mac = malloc(sizeof(char *) * g_thread_num);
- for (k = 0; k < g_thread_num; k++) {
- g_uadk_pool.mac[k] = calloc(MAX_IVK_LENTH, sizeof(char));
- if (!g_uadk_pool.mac[k])
- goto free_mac;
- }
-
g_uadk_pool.hash = malloc(sizeof(char *) * g_thread_num);
for (m = 0; m < g_thread_num; m++) {
g_uadk_pool.hash[m] = calloc(MAX_IVK_LENTH, sizeof(char));
@@ -686,12 +679,6 @@ free_hash:
free(g_uadk_pool.hash[idx]);
free(g_uadk_pool.hash);
-free_mac:
- for (idx = k - 1; idx >= 0; idx--)
- free(g_uadk_pool.mac[idx]);
-
- free(g_uadk_pool.mac);
-
free_key:
for (idx = j - 1; idx >= 0; idx--)
free(g_uadk_pool.key[idx]);
@@ -712,13 +699,11 @@ static void free_ivkey_source(void)
for (i = 0; i < g_thread_num; i++) {
free(g_uadk_pool.hash[i]);
- free(g_uadk_pool.mac[i]);
free(g_uadk_pool.key[i]);
free(g_uadk_pool.iv[i]);
}
free(g_uadk_pool.hash);
- free(g_uadk_pool.mac);
free(g_uadk_pool.key);
free(g_uadk_pool.iv);
}
@@ -767,14 +752,13 @@ static int init_uadk_bd_pool(void)
if (!g_optype)
get_aead_data(g_uadk_pool.pool[i].bds[j].src,
g_pktlen + SEC_AEAD_LEN);
- else
+ else {
read_aead_dst_data(g_uadk_pool.pool[i].bds[j].src,
g_pktlen + SEC_AEAD_LEN);
+ memcpy(g_uadk_pool.pool[i].bds[j].mac, g_save_mac, SEC_MAX_MAC_LEN);
+ }
}
}
-
- if (g_alg == AEAD_TYPE && g_optype)
- memcpy(g_uadk_pool.mac[i], g_save_mac, SEC_MAX_MAC_LEN);
}
}
@@ -957,7 +941,7 @@ static void *sec_uadk_aead_async(void *arg)
{
thread_data *pdata = (thread_data *)arg;
struct wd_aead_sess_setup aead_setup = {0};
- u8 *priv_iv, *priv_key, *priv_mac, *priv_hash;
+ u8 *priv_iv, *priv_key, *priv_hash;
u32 auth_size = SEC_PERF_AUTH_SIZE;
struct wd_aead_req areq;
struct bd_pool *uadk_pool;
@@ -972,7 +956,6 @@ static void *sec_uadk_aead_async(void *arg)
uadk_pool = &g_uadk_pool.pool[pdata->td_id];
priv_iv = g_uadk_pool.iv[pdata->td_id];
priv_key = g_uadk_pool.key[pdata->td_id];
- priv_mac = g_uadk_pool.mac[pdata->td_id];
priv_hash = g_uadk_pool.hash[pdata->td_id];
memset(priv_iv, DEF_IVK_DATA, MAX_IVK_LENTH);
@@ -1010,7 +993,7 @@ static void *sec_uadk_aead_async(void *arg)
areq.op_type = pdata->optype;
areq.iv = priv_iv; // aead IV need update with param
- areq.mac = priv_mac;
+ areq.mac = uadk_pool->bds[0].mac;
areq.iv_bytes = pdata->ivsize;
areq.mac_bytes = auth_size;
areq.assoc_bytes = SEC_AEAD_LEN;
@@ -1033,6 +1016,7 @@ static void *sec_uadk_aead_async(void *arg)
i = count % MAX_POOL_LENTH;
areq.src = uadk_pool->bds[i].src;
areq.dst = uadk_pool->bds[i].dst;
+ areq.mac = uadk_pool->bds[i].mac;
ret = wd_do_aead_async(h_sess, &areq);
if (ret < 0) {
@@ -1188,7 +1172,7 @@ static void *sec_uadk_aead_sync(void *arg)
{
thread_data *pdata = (thread_data *)arg;
struct wd_aead_sess_setup aead_setup = {0};
- u8 *priv_iv, *priv_key, *priv_mac, *priv_hash;
+ u8 *priv_iv, *priv_key, *priv_hash;
u32 auth_size = SEC_PERF_AUTH_SIZE;
struct wd_aead_req areq;
struct bd_pool *uadk_pool;
@@ -1203,7 +1187,6 @@ static void *sec_uadk_aead_sync(void *arg)
priv_iv = g_uadk_pool.iv[pdata->td_id];
priv_key = g_uadk_pool.key[pdata->td_id];
- priv_mac = g_uadk_pool.mac[pdata->td_id];
priv_hash = g_uadk_pool.hash[pdata->td_id];
memset(priv_iv, DEF_IVK_DATA, MAX_IVK_LENTH);
@@ -1212,8 +1195,8 @@ static void *sec_uadk_aead_sync(void *arg)
aead_setup.calg = pdata->alg;
aead_setup.cmode = pdata->mode;
if (pdata->is_union) {
- aead_setup.dalg = WD_DIGEST_SHA256;
- aead_setup.dmode = WD_DIGEST_HMAC;
+ aead_setup.dalg = pdata->dalg;
+ aead_setup.dmode = pdata->dmode;
}
h_sess = wd_aead_alloc_sess(&aead_setup);
if (!h_sess)
@@ -1241,7 +1224,7 @@ static void *sec_uadk_aead_sync(void *arg)
areq.op_type = pdata->optype;
areq.iv = priv_iv; // aead IV need update with param
- areq.mac = priv_mac;
+ areq.mac = uadk_pool->bds[0].mac;
areq.iv_bytes = pdata->ivsize;
areq.assoc_bytes = SEC_AEAD_LEN;
areq.in_bytes = g_pktlen;
--
2.25.1