Update some patch for uadk from mainline. To get more information, please visit the homepage: https://github.comp/Linaro/uadk Signed-off-by: Yang Shen <shenyang39@huawei.com>
762 lines
22 KiB
Diff
762 lines
22 KiB
Diff
From 280e01c8a0aae071d54200f9a5fdcdc5035c3a9c Mon Sep 17 00:00:00 2001
|
|
From: Wenkai Lin <linwenkai6@hisilicon.com>
|
|
Date: Sun, 24 Apr 2022 09:54:29 +0800
|
|
Subject: [PATCH 125/183] uadk: fix parameter used as working variable
|
|
|
|
input parameter of function should not be used as
|
|
working variable, fix it.
|
|
|
|
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
|
|
---
|
|
drv/hisi_hpre.c | 3 ++-
|
|
drv/hisi_sec.c | 3 ++-
|
|
v1/drv/hisi_hpre_udrv.c | 13 ++++++----
|
|
v1/drv/hisi_sec_udrv.c | 3 ++-
|
|
v1/wd.c | 13 +++++-----
|
|
v1/wd_adapter.c | 15 ++++++------
|
|
v1/wd_aead.c | 3 ++-
|
|
v1/wd_cipher.c | 3 ++-
|
|
v1/wd_comp.c | 3 ++-
|
|
v1/wd_dh.c | 3 ++-
|
|
v1/wd_digest.c | 3 ++-
|
|
v1/wd_ecc.c | 6 +++--
|
|
v1/wd_rng.c | 3 ++-
|
|
v1/wd_rsa.c | 3 ++-
|
|
v1/wd_sgl.c | 54 ++++++++++++++++++++++++-----------------
|
|
wd_aead.c | 3 ++-
|
|
wd_cipher.c | 3 ++-
|
|
wd_comp.c | 9 ++++---
|
|
wd_dh.c | 3 ++-
|
|
wd_digest.c | 3 ++-
|
|
wd_ecc.c | 6 +++--
|
|
wd_mempool.c | 18 ++++++++------
|
|
wd_util.c | 3 ++-
|
|
23 files changed, 110 insertions(+), 69 deletions(-)
|
|
|
|
diff --git a/drv/hisi_hpre.c b/drv/hisi_hpre.c
|
|
index bf0f440..4e62c0f 100644
|
|
--- a/drv/hisi_hpre.c
|
|
+++ b/drv/hisi_hpre.c
|
|
@@ -1965,11 +1965,12 @@ static void msg_pack(char *dst, __u64 *out_len,
|
|
}
|
|
|
|
static int sm2_kdf(struct wd_dtb *out, struct wd_ecc_point *x2y2,
|
|
- __u64 m_len, struct wd_hash_mt *hash)
|
|
+ __u64 mt_len, struct wd_hash_mt *hash)
|
|
{
|
|
char p_out[MAX_HASH_LENS] = {0};
|
|
__u32 h_bytes, x2y2_len;
|
|
char *tmp = out->data;
|
|
+ __u64 m_len = mt_len;
|
|
__u64 in_len, lens;
|
|
char *p_in, *t_out;
|
|
__u8 ctr[4];
|
|
diff --git a/drv/hisi_sec.c b/drv/hisi_sec.c
|
|
index 88eacc3..b17ce0f 100644
|
|
--- a/drv/hisi_sec.c
|
|
+++ b/drv/hisi_sec.c
|
|
@@ -487,9 +487,10 @@ int hisi_sec_init(struct wd_ctx_config_internal *config, void *priv);
|
|
void hisi_sec_exit(void *priv);
|
|
|
|
/* increment counter (128-bit int) by software */
|
|
-static void ctr_iv_inc(__u8 *counter, __u32 c)
|
|
+static void ctr_iv_inc(__u8 *counter, __u32 len)
|
|
{
|
|
__u32 n = CTR_128BIT_COUNTER;
|
|
+ __u32 c = len;
|
|
|
|
do {
|
|
--n;
|
|
diff --git a/v1/drv/hisi_hpre_udrv.c b/v1/drv/hisi_hpre_udrv.c
|
|
index 76ba3e8..805160e 100644
|
|
--- a/v1/drv/hisi_hpre_udrv.c
|
|
+++ b/v1/drv/hisi_hpre_udrv.c
|
|
@@ -1873,13 +1873,14 @@ static int split_req(struct qm_queue_info *info,
|
|
return 0;
|
|
}
|
|
|
|
-static int fill_sm2_enc_sqe(void *message, struct qm_queue_info *info, __u16 i)
|
|
+static int fill_sm2_enc_sqe(void *msg, struct qm_queue_info *info, __u16 idx)
|
|
{
|
|
struct wcrypto_hash_mt *hash = &((struct q_info *)info->q->qinfo)->hash;
|
|
- struct wcrypto_ecc_msg *req_src = message;
|
|
+ struct wcrypto_ecc_msg *req_src = msg;
|
|
struct wcrypto_sm2_enc_in *ein = (void *)req_src->in;
|
|
struct wcrypto_ecc_msg *req_dst[2] = {NULL};
|
|
struct wd_dtb *plaintext = &ein->plaintext;
|
|
+ __u16 i = idx;
|
|
int ret;
|
|
|
|
if (plaintext->dsize <= HW_PLAINTEXT_BYTES_MAX &&
|
|
@@ -2053,11 +2054,12 @@ static int qm_parse_ecc_sqe_general(void *msg, const struct qm_queue_info *info,
|
|
return 1;
|
|
}
|
|
|
|
-static int parse_first_sqe(void *hw_msg, struct qm_queue_info *info, __u16 i,
|
|
+static int parse_first_sqe(void *hw_msg, struct qm_queue_info *info, __u16 idx,
|
|
__u16 usr)
|
|
{
|
|
- struct wcrypto_ecc_msg *msg = info->req_cache[i];
|
|
+ struct wcrypto_ecc_msg *msg = info->req_cache[idx];
|
|
struct wcrypto_ecc_msg *msg_src;
|
|
+ __u16 i = idx;
|
|
int ret;
|
|
|
|
ret = qm_parse_ecc_sqe_general(hw_msg, info, i, usr);
|
|
@@ -2177,10 +2179,11 @@ static void msg_pack(char *dst, __u64 *out_len,
|
|
}
|
|
|
|
static int sm2_kdf(struct wd_dtb *out, struct wcrypto_ecc_point *x2y2,
|
|
- __u64 m_len, struct q_info *q_info)
|
|
+ __u64 hash_mt_len, struct q_info *q_info)
|
|
{
|
|
struct wcrypto_hash_mt *hash = &q_info->hash;
|
|
char p_out[MAX_HASH_LENS] = {0};
|
|
+ __u64 m_len = hash_mt_len;
|
|
__u32 h_bytes, x2y2_len;
|
|
char *tmp = out->data;
|
|
__u64 in_len, lens;
|
|
diff --git a/v1/drv/hisi_sec_udrv.c b/v1/drv/hisi_sec_udrv.c
|
|
index 0e8bf57..4d5ede5 100644
|
|
--- a/v1/drv/hisi_sec_udrv.c
|
|
+++ b/v1/drv/hisi_sec_udrv.c
|
|
@@ -206,10 +206,11 @@ static void fill_bd3_addr_type(__u8 data_fmt, struct hisi_sec_bd3_sqe *sqe3)
|
|
}
|
|
|
|
/* increment counter (128-bit int) by c */
|
|
-static void ctr_iv_inc(__u8 *counter, __u32 c, __u8 data_fmt)
|
|
+static void ctr_iv_inc(__u8 *counter, __u32 shift_len, __u8 data_fmt)
|
|
{
|
|
__u32 n = CTR_128BIT_COUNTER;
|
|
__u8 *counter1 = counter;
|
|
+ __u32 c = shift_len;
|
|
|
|
if (data_fmt == WD_SGL_BUF) {
|
|
counter1 = wd_get_first_sge_buf((struct wd_sgl *)counter);
|
|
diff --git a/v1/wd.c b/v1/wd.c
|
|
index 8e3a91c..8ef83c6 100644
|
|
--- a/v1/wd.c
|
|
+++ b/v1/wd.c
|
|
@@ -845,19 +845,20 @@ void *wd_dma_to_va(struct wd_queue *q, void *dma)
|
|
void *wd_drv_mmap_qfr(struct wd_queue *q, enum uacce_qfrt qfrt, size_t size)
|
|
{
|
|
struct q_info *qinfo = q->qinfo;
|
|
+ size_t tmp = size;
|
|
off_t off;
|
|
|
|
off = qfrt * getpagesize();
|
|
|
|
if (qfrt != WD_UACCE_QFRT_SS)
|
|
- size = qinfo->qfrs_offset[qfrt];
|
|
+ tmp = qinfo->qfrs_offset[qfrt];
|
|
|
|
- return mmap(0, size, PROT_READ | PROT_WRITE,
|
|
+ return mmap(0, tmp, PROT_READ | PROT_WRITE,
|
|
MAP_SHARED, qinfo->fd, off);
|
|
}
|
|
|
|
void wd_drv_unmmap_qfr(struct wd_queue *q, void *addr,
|
|
- enum uacce_qfrt qfrt, size_t size)
|
|
+ enum uacce_qfrt qfrt, size_t size)
|
|
{
|
|
struct q_info *qinfo = q->qinfo;
|
|
|
|
@@ -865,9 +866,9 @@ void wd_drv_unmmap_qfr(struct wd_queue *q, void *addr,
|
|
return;
|
|
|
|
if (qfrt != WD_UACCE_QFRT_SS)
|
|
- size = qinfo->qfrs_offset[qfrt];
|
|
-
|
|
- munmap(addr, size);
|
|
+ munmap(addr, qinfo->qfrs_offset[qfrt]);
|
|
+ else
|
|
+ munmap(addr, size);
|
|
}
|
|
int wd_register_log(wd_log log)
|
|
{
|
|
diff --git a/v1/wd_adapter.c b/v1/wd_adapter.c
|
|
index 53bf41e..0b7b084 100644
|
|
--- a/v1/wd_adapter.c
|
|
+++ b/v1/wd_adapter.c
|
|
@@ -198,15 +198,16 @@ void *drv_reserve_mem(struct wd_queue *q, size_t size)
|
|
struct wd_ss_region *rgn = NULL;
|
|
struct q_info *qinfo = q->qinfo;
|
|
unsigned long info = 0;
|
|
+ size_t tmp = size;
|
|
unsigned long i = 0;
|
|
void *ptr = NULL;
|
|
int ret = 1;
|
|
|
|
/* Make sure memory map granularity size align */
|
|
if (!qinfo->iommu_type)
|
|
- size = ALIGN(size, WD_UACCE_GRAN_SIZE);
|
|
+ tmp = ALIGN(tmp, WD_UACCE_GRAN_SIZE);
|
|
|
|
- ptr = wd_drv_mmap_qfr(q, WD_UACCE_QFRT_SS, size);
|
|
+ ptr = wd_drv_mmap_qfr(q, WD_UACCE_QFRT_SS, tmp);
|
|
if (ptr == MAP_FAILED) {
|
|
int value = errno;
|
|
|
|
@@ -215,8 +216,8 @@ void *drv_reserve_mem(struct wd_queue *q, size_t size)
|
|
}
|
|
|
|
qinfo->ss_va = ptr;
|
|
- qinfo->ss_size = size;
|
|
- size = 0;
|
|
+ qinfo->ss_size = tmp;
|
|
+ tmp = 0;
|
|
while (ret > 0) {
|
|
info = (unsigned long)i;
|
|
ret = ioctl(qinfo->fd, WD_UACCE_CMD_GET_SS_DMA, &info);
|
|
@@ -238,8 +239,8 @@ void *drv_reserve_mem(struct wd_queue *q, size_t size)
|
|
rgn->size = (info & WD_UACCE_GRAN_NUM_MASK) <<
|
|
WD_UACCE_GRAN_SHIFT;
|
|
rgn->pa = info & (~WD_UACCE_GRAN_NUM_MASK);
|
|
- rgn->va = ptr + size;
|
|
- size += rgn->size;
|
|
+ rgn->va = ptr + tmp;
|
|
+ tmp += rgn->size;
|
|
drv_add_slice(q, rgn);
|
|
i++;
|
|
}
|
|
@@ -248,7 +249,7 @@ void *drv_reserve_mem(struct wd_queue *q, size_t size)
|
|
|
|
err_out:
|
|
drv_free_slice(q);
|
|
- drv_unmap_reserve_mem(q, ptr, size);
|
|
+ drv_unmap_reserve_mem(q, ptr, tmp);
|
|
|
|
return NULL;
|
|
}
|
|
diff --git a/v1/wd_aead.c b/v1/wd_aead.c
|
|
index d66f6e0..4ff690a 100644
|
|
--- a/v1/wd_aead.c
|
|
+++ b/v1/wd_aead.c
|
|
@@ -635,6 +635,7 @@ int wcrypto_aead_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_aead_msg *aead_resp = NULL;
|
|
struct wcrypto_aead_ctx *ctx;
|
|
struct wcrypto_aead_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -664,7 +665,7 @@ int wcrypto_aead_poll(struct wd_queue *q, unsigned int num)
|
|
ctx->setup.cb(aead_resp, tag->wcrypto_tag.tag);
|
|
aead_requests_uninit(&aead_resp, ctx, 1);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return count;
|
|
}
|
|
diff --git a/v1/wd_cipher.c b/v1/wd_cipher.c
|
|
index 355d9aa..ad21a3a 100644
|
|
--- a/v1/wd_cipher.c
|
|
+++ b/v1/wd_cipher.c
|
|
@@ -504,6 +504,7 @@ int wcrypto_cipher_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_cipher_msg *cipher_resp = NULL;
|
|
struct wcrypto_cipher_ctx *ctx;
|
|
struct wcrypto_cipher_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -532,7 +533,7 @@ int wcrypto_cipher_poll(struct wd_queue *q, unsigned int num)
|
|
ctx = tag->wcrypto_tag.ctx;
|
|
ctx->setup.cb(cipher_resp, tag->wcrypto_tag.tag);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return count;
|
|
}
|
|
diff --git a/v1/wd_comp.c b/v1/wd_comp.c
|
|
index 7debef7..33546d4 100644
|
|
--- a/v1/wd_comp.c
|
|
+++ b/v1/wd_comp.c
|
|
@@ -280,6 +280,7 @@ int wcrypto_comp_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_comp_msg *resp = NULL;
|
|
struct wcrypto_comp_ctx *ctx;
|
|
struct wcrypto_comp_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -309,7 +310,7 @@ int wcrypto_comp_poll(struct wd_queue *q, unsigned int num)
|
|
ctx->cb(resp, tag->wcrypto_tag.tag);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
resp = NULL;
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return ret < 0 ? ret : count;
|
|
}
|
|
diff --git a/v1/wd_dh.c b/v1/wd_dh.c
|
|
index d11d5cd..49f52d9 100644
|
|
--- a/v1/wd_dh.c
|
|
+++ b/v1/wd_dh.c
|
|
@@ -371,6 +371,7 @@ int wcrypto_dh_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_dh_msg *resp = NULL;
|
|
struct wcrypto_dh_ctx *ctx;
|
|
struct wcrypto_cb_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -394,7 +395,7 @@ int wcrypto_dh_poll(struct wd_queue *q, unsigned int num)
|
|
ctx->setup.cb(resp, tag->tag);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
resp = NULL;
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return count;
|
|
}
|
|
diff --git a/v1/wd_digest.c b/v1/wd_digest.c
|
|
index 71e5747..14df736 100644
|
|
--- a/v1/wd_digest.c
|
|
+++ b/v1/wd_digest.c
|
|
@@ -422,6 +422,7 @@ int wcrypto_digest_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_digest_msg *digest_resp = NULL;
|
|
struct wcrypto_digest_ctx *ctx;
|
|
struct wcrypto_digest_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -451,7 +452,7 @@ int wcrypto_digest_poll(struct wd_queue *q, unsigned int num)
|
|
ctx = tag->wcrypto_tag.ctx;
|
|
ctx->setup.cb(digest_resp, tag->wcrypto_tag.tag);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return count;
|
|
}
|
|
diff --git a/v1/wd_ecc.c b/v1/wd_ecc.c
|
|
index dfa5192..58dabfc 100644
|
|
--- a/v1/wd_ecc.c
|
|
+++ b/v1/wd_ecc.c
|
|
@@ -180,8 +180,9 @@ static int trans_to_binpad(char *dst, const char *src,
|
|
return WD_SUCCESS;
|
|
}
|
|
|
|
-static void wd_memset_zero(void *data, __u32 size)
|
|
+static void wd_memset_zero(void *data, __u32 mem_size)
|
|
{
|
|
+ __u32 size = mem_size;
|
|
char *s = data;
|
|
|
|
if (unlikely(!s))
|
|
@@ -1620,6 +1621,7 @@ static int ecc_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_ecc_msg *resp = NULL;
|
|
struct wcrypto_ecc_ctx *ctx;
|
|
struct wcrypto_cb_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -1638,7 +1640,7 @@ static int ecc_poll(struct wd_queue *q, unsigned int num)
|
|
ctx->setup.cb(resp, tag->tag);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
resp = NULL;
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return count;
|
|
}
|
|
diff --git a/v1/wd_rng.c b/v1/wd_rng.c
|
|
index d9d420e..7b3bda3 100644
|
|
--- a/v1/wd_rng.c
|
|
+++ b/v1/wd_rng.c
|
|
@@ -160,6 +160,7 @@ int wcrypto_rng_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_rng_msg *resp = NULL;
|
|
struct wcrypto_rng_ctx *ctx;
|
|
struct wcrypto_cb_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -184,7 +185,7 @@ int wcrypto_rng_poll(struct wd_queue *q, unsigned int num)
|
|
ctx->setup.cb(resp, tag->tag);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
resp = NULL;
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return count;
|
|
}
|
|
diff --git a/v1/wd_rsa.c b/v1/wd_rsa.c
|
|
index 4de249f..6ba29d7 100644
|
|
--- a/v1/wd_rsa.c
|
|
+++ b/v1/wd_rsa.c
|
|
@@ -1034,6 +1034,7 @@ int wcrypto_rsa_poll(struct wd_queue *q, unsigned int num)
|
|
struct wcrypto_rsa_msg *resp = NULL;
|
|
struct wcrypto_rsa_ctx *ctx;
|
|
struct wcrypto_cb_tag *tag;
|
|
+ unsigned int tmp = num;
|
|
int count = 0;
|
|
int ret;
|
|
|
|
@@ -1056,7 +1057,7 @@ int wcrypto_rsa_poll(struct wd_queue *q, unsigned int num)
|
|
ctx->setup.cb(resp, tag->tag);
|
|
wd_put_cookies(&ctx->pool, (void **)&tag, 1);
|
|
resp = NULL;
|
|
- } while (--num);
|
|
+ } while (--tmp);
|
|
|
|
return count;
|
|
}
|
|
diff --git a/v1/wd_sgl.c b/v1/wd_sgl.c
|
|
index 9bdbe92..dffbf12 100644
|
|
--- a/v1/wd_sgl.c
|
|
+++ b/v1/wd_sgl.c
|
|
@@ -512,32 +512,33 @@ struct wd_sgl *wd_alloc_sgl(void *pool, __u32 size)
|
|
void wd_free_sgl(void *pool, struct wd_sgl *sgl)
|
|
{
|
|
struct wd_sglpool *p = pool;
|
|
+ struct wd_sgl *tmp = sgl;
|
|
struct wd_sgl *next;
|
|
int i;
|
|
|
|
- if (unlikely(!p || !sgl || !p->sgl_pool)) {
|
|
+ if (unlikely(!p || !tmp || !p->sgl_pool)) {
|
|
WD_ERR("pool or sgl or p->sgl_pool is null!\n");
|
|
return;
|
|
}
|
|
|
|
- if (unlikely((uintptr_t)sgl->next & FLAG_MERGED_SGL)) {
|
|
+ if (unlikely((uintptr_t)tmp->next & FLAG_MERGED_SGL)) {
|
|
WD_ERR("This is a merged sgl, u cannot free it!\n");
|
|
return;
|
|
}
|
|
|
|
do {
|
|
- next = sgl->next;
|
|
- sgl->buf_sum = sgl->buf_num;
|
|
- sgl->next = NULL;
|
|
- sgl->sum_data_bytes = 0;
|
|
- for (i = 0; i < sgl->buf_num; i++)
|
|
- sgl->sge[i].data_len = 0;
|
|
+ next = tmp->next;
|
|
+ tmp->buf_sum = tmp->buf_num;
|
|
+ tmp->next = NULL;
|
|
+ tmp->sum_data_bytes = 0;
|
|
+ for (i = 0; i < tmp->buf_num; i++)
|
|
+ tmp->sge[i].data_len = 0;
|
|
|
|
/* have to update current 'wd_sgl' before free it */
|
|
- wd_free_blk(p->sgl_pool, sgl);
|
|
+ wd_free_blk(p->sgl_pool, tmp);
|
|
wd_get_free_blk_num(p->sgl_pool, &p->free_sgl_num);
|
|
next = (struct wd_sgl *)((uintptr_t)next & (~FLAG_MERGED_SGL));
|
|
- sgl = next;
|
|
+ tmp = next;
|
|
} while (next);
|
|
}
|
|
|
|
@@ -577,12 +578,16 @@ int wd_sgl_merge(struct wd_sgl *dst_sgl, struct wd_sgl *src_sgl)
|
|
return WD_SUCCESS;
|
|
}
|
|
|
|
-static void sgl_cp_to_pbuf(struct wd_sgl *sgl, int strtsg, int strtad,
|
|
- void *pbuf, size_t size)
|
|
+static void sgl_cp_to_pbuf(struct wd_sgl *src_sgl, int start_sg, int strtad,
|
|
+ void *buf, size_t sgl_sz)
|
|
{
|
|
- __u32 sz = sgl->pool->setup.buf_size;
|
|
- __u32 act_sz = MIN(size, sz - strtad);
|
|
+ __u32 sz = src_sgl->pool->setup.buf_size;
|
|
+ __u32 act_sz = MIN(sgl_sz, sz - strtad);
|
|
+ struct wd_sgl *sgl = src_sgl;
|
|
+ int strtsg = start_sg;
|
|
+ size_t size = sgl_sz;
|
|
struct wd_sgl *next;
|
|
+ void *pbuf = buf;
|
|
int i;
|
|
|
|
next = (struct wd_sgl *)((uintptr_t)sgl->next & (~FLAG_MERGED_SGL));
|
|
@@ -654,12 +659,16 @@ int wd_sgl_cp_to_pbuf(struct wd_sgl *sgl, size_t offset, void *pbuf, size_t size
|
|
return 0;
|
|
}
|
|
|
|
-static void sgl_cp_from_pbuf(struct wd_sgl *sgl, int strtsg, int strtad,
|
|
- void *pbuf, size_t size)
|
|
+static void sgl_cp_from_pbuf(struct wd_sgl *dst_sgl, int start_sg, int strtad,
|
|
+ void *buf, size_t mem_sz)
|
|
{
|
|
- __u32 sz = sgl->pool->setup.buf_size;
|
|
- __u32 act_sz = MIN(size, sz - strtad);
|
|
+ __u32 sz = dst_sgl->pool->setup.buf_size;
|
|
+ __u32 act_sz = MIN(mem_sz, sz - strtad);
|
|
+ struct wd_sgl *sgl = dst_sgl;
|
|
+ int strtsg = start_sg;
|
|
+ size_t size = mem_sz;
|
|
struct wd_sgl *next;
|
|
+ void *pbuf = buf;
|
|
int i;
|
|
|
|
next = (struct wd_sgl *)((uintptr_t)sgl->next & (~FLAG_MERGED_SGL));
|
|
@@ -766,18 +775,19 @@ void wd_sgl_iova_unmap(void *pool, void *sgl_iova, struct wd_sgl *sgl)
|
|
|
|
void *wd_get_last_sge_buf(struct wd_sgl *sgl)
|
|
{
|
|
+ struct wd_sgl *tmp = sgl;
|
|
uintptr_t next;
|
|
|
|
- if (unlikely(!sgl || !sgl->buf_num)) {
|
|
+ if (unlikely(!tmp || !tmp->buf_num)) {
|
|
WD_ERR("sgl or buf_num in sgl is null!\n");
|
|
return NULL;
|
|
}
|
|
|
|
- next = (uintptr_t)sgl->next & (~FLAG_MERGED_SGL);
|
|
+ next = (uintptr_t)tmp->next & (~FLAG_MERGED_SGL);
|
|
if (next)
|
|
- sgl = (struct wd_sgl *)next;
|
|
+ tmp = (struct wd_sgl *)next;
|
|
|
|
- return sgl->sge[sgl->buf_num - 1].buf;
|
|
+ return tmp->sge[tmp->buf_num - 1].buf;
|
|
}
|
|
|
|
void *wd_get_first_sge_buf(struct wd_sgl *sgl)
|
|
diff --git a/wd_aead.c b/wd_aead.c
|
|
index 36ca842..b3e7b41 100644
|
|
--- a/wd_aead.c
|
|
+++ b/wd_aead.c
|
|
@@ -639,6 +639,7 @@ int wd_aead_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
struct wd_aead_msg resp_msg, *msg;
|
|
struct wd_aead_req *req;
|
|
__u64 recv_count = 0;
|
|
+ __u32 tmp = expt;
|
|
int ret;
|
|
|
|
if (!count) {
|
|
@@ -678,7 +679,7 @@ int wd_aead_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
wd_put_msg_to_pool(&wd_aead_setting.pool,
|
|
idx, resp_msg.tag);
|
|
*count = recv_count;
|
|
- } while (--expt);
|
|
+ } while (--tmp);
|
|
|
|
return ret;
|
|
}
|
|
diff --git a/wd_cipher.c b/wd_cipher.c
|
|
index 43e83b7..b074dd2 100644
|
|
--- a/wd_cipher.c
|
|
+++ b/wd_cipher.c
|
|
@@ -548,6 +548,7 @@ int wd_cipher_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
struct wd_cipher_msg resp_msg, *msg;
|
|
struct wd_cipher_req *req;
|
|
__u64 recv_count = 0;
|
|
+ __u32 tmp = expt;
|
|
int ret;
|
|
|
|
if (unlikely(!count)) {
|
|
@@ -588,7 +589,7 @@ int wd_cipher_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
wd_put_msg_to_pool(&wd_cipher_setting.pool, idx,
|
|
resp_msg.tag);
|
|
*count = recv_count;
|
|
- } while (--expt);
|
|
+ } while (--tmp);
|
|
|
|
return ret;
|
|
}
|
|
diff --git a/wd_comp.c b/wd_comp.c
|
|
index cc8f192..502bc23 100644
|
|
--- a/wd_comp.c
|
|
+++ b/wd_comp.c
|
|
@@ -187,6 +187,7 @@ int wd_comp_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
struct wd_comp_msg *msg;
|
|
struct wd_comp_req *req;
|
|
__u64 recv_count = 0;
|
|
+ __u32 tmp = expt;
|
|
int ret;
|
|
|
|
if (unlikely(!count)) {
|
|
@@ -228,7 +229,7 @@ int wd_comp_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
/* free msg cache to msg_pool */
|
|
wd_put_msg_to_pool(&wd_comp_setting.pool, idx, resp_msg.tag);
|
|
*count = recv_count;
|
|
- } while (--expt);
|
|
+ } while (--tmp);
|
|
|
|
return ret;
|
|
}
|
|
@@ -545,14 +546,16 @@ int wd_do_comp_sync2(handle_t h_sess, struct wd_comp_req *req)
|
|
return 0;
|
|
}
|
|
|
|
-static unsigned int bit_reverse(register unsigned int x)
|
|
+static unsigned int bit_reverse(register unsigned int target)
|
|
{
|
|
+ register unsigned int x = target;
|
|
+
|
|
x = (((x & 0xaaaaaaaa) >> 1) | ((x & 0x55555555) << 1));
|
|
x = (((x & 0xcccccccc) >> 2) | ((x & 0x33333333) << 2));
|
|
x = (((x & 0xf0f0f0f0) >> 4) | ((x & 0x0f0f0f0f) << 4));
|
|
x = (((x & 0xff00ff00) >> 8) | ((x & 0x00ff00ff) << 8));
|
|
|
|
- return((x >> 16) | (x << 16));
|
|
+ return ((x >> 16) | (x << 16));
|
|
}
|
|
|
|
/**
|
|
diff --git a/wd_dh.c b/wd_dh.c
|
|
index c16701d..2b02e3c 100644
|
|
--- a/wd_dh.c
|
|
+++ b/wd_dh.c
|
|
@@ -365,6 +365,7 @@ int wd_dh_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
struct wd_dh_req *req;
|
|
struct wd_dh_msg *msg;
|
|
__u32 rcv_cnt = 0;
|
|
+ __u32 tmp = expt;
|
|
int ret;
|
|
|
|
if (unlikely(!count)) {
|
|
@@ -405,7 +406,7 @@ int wd_dh_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
req->cb(req);
|
|
wd_put_msg_to_pool(&wd_dh_setting.pool, idx, rcv_msg.tag);
|
|
*count = rcv_cnt;
|
|
- } while (--expt);
|
|
+ } while (--tmp);
|
|
|
|
return ret;
|
|
}
|
|
diff --git a/wd_digest.c b/wd_digest.c
|
|
index d5602ef..1d4e4cc 100644
|
|
--- a/wd_digest.c
|
|
+++ b/wd_digest.c
|
|
@@ -444,6 +444,7 @@ int wd_digest_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
struct wd_digest_msg recv_msg, *msg;
|
|
struct wd_digest_req *req;
|
|
__u32 recv_cnt = 0;
|
|
+ __u32 tmp = expt;
|
|
int ret;
|
|
|
|
if (unlikely(!count)) {
|
|
@@ -486,7 +487,7 @@ int wd_digest_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
wd_put_msg_to_pool(&wd_digest_setting.pool, idx,
|
|
recv_msg.tag);
|
|
*count = recv_cnt;
|
|
- } while (--expt);
|
|
+ } while (--tmp);
|
|
|
|
return ret;
|
|
}
|
|
diff --git a/wd_ecc.c b/wd_ecc.c
|
|
index 9005103..c6bd111 100644
|
|
--- a/wd_ecc.c
|
|
+++ b/wd_ecc.c
|
|
@@ -301,10 +301,11 @@ static __u32 get_hash_bytes(__u8 type)
|
|
return val;
|
|
}
|
|
|
|
-static void init_dtb_param(void *dtb, char *start,
|
|
+static void init_dtb_param(void *dtb, char *str,
|
|
__u32 dsz, __u32 bsz, __u32 num)
|
|
{
|
|
struct wd_dtb *tmp = dtb;
|
|
+ char *start = str;
|
|
int i = 0;
|
|
|
|
while (i++ < num) {
|
|
@@ -2190,6 +2191,7 @@ int wd_ecc_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
struct wd_ctx_internal *ctx;
|
|
struct wd_ecc_req *req;
|
|
__u32 rcv_cnt = 0;
|
|
+ __u32 tmp = expt;
|
|
int ret;
|
|
|
|
if (unlikely(!count)) {
|
|
@@ -2230,7 +2232,7 @@ int wd_ecc_poll_ctx(__u32 idx, __u32 expt, __u32 *count)
|
|
req->cb(req);
|
|
wd_put_msg_to_pool(&wd_ecc_setting.pool, idx, recv_msg.tag);
|
|
*count = rcv_cnt;
|
|
- } while (--expt);
|
|
+ } while (--tmp);
|
|
|
|
return ret;
|
|
}
|
|
diff --git a/wd_mempool.c b/wd_mempool.c
|
|
index 03df19a..d9259de 100644
|
|
--- a/wd_mempool.c
|
|
+++ b/wd_mempool.c
|
|
@@ -174,8 +174,9 @@ struct mempool {
|
|
*
|
|
* Undefined if no bit exists, so code should check against 0 first.
|
|
*/
|
|
-static __always_inline unsigned long wd_ffs(unsigned long word)
|
|
+static __always_inline unsigned long wd_ffs(unsigned long target_word)
|
|
{
|
|
+ unsigned long word = target_word;
|
|
int num = 0;
|
|
|
|
if ((word & 0xffffffff) == 0) {
|
|
@@ -234,9 +235,11 @@ static void destroy_bitmap(struct bitmap *bm)
|
|
}
|
|
|
|
static unsigned long _find_next_bit(unsigned long *map, unsigned long bits,
|
|
- unsigned long start, unsigned long invert)
|
|
+ unsigned long begin_position,
|
|
+ unsigned long invert)
|
|
{
|
|
unsigned long tmp, mask, next_bit;
|
|
+ unsigned long start = begin_position;
|
|
|
|
if (start >= bits)
|
|
return bits;
|
|
@@ -888,15 +891,16 @@ static void uninit_mempool(struct mempool *mp)
|
|
handle_t wd_mempool_create(size_t size, int node)
|
|
{
|
|
struct mempool *mp;
|
|
+ size_t tmp = size;
|
|
int ret;
|
|
|
|
- if (!size || node < 0 || node > numa_max_node()) {
|
|
- WD_ERR("invalid: numa node is %d, size is %ld!\n", node, size);
|
|
+ if (!tmp || node < 0 || node > numa_max_node()) {
|
|
+ WD_ERR("invalid: numa node is %d, size is %ld!\n", node, tmp);
|
|
return (handle_t)(-WD_EINVAL);
|
|
}
|
|
|
|
- if (WD_MEMPOOL_SIZE_MASK & size)
|
|
- size += WD_MEMPOOL_BLOCK_SIZE - (WD_MEMPOOL_SIZE_MASK & size);
|
|
+ if (WD_MEMPOOL_SIZE_MASK & tmp)
|
|
+ tmp += WD_MEMPOOL_BLOCK_SIZE - (WD_MEMPOOL_SIZE_MASK & tmp);
|
|
|
|
mp = calloc(1, sizeof(*mp));
|
|
if (!mp) {
|
|
@@ -905,7 +909,7 @@ handle_t wd_mempool_create(size_t size, int node)
|
|
}
|
|
|
|
mp->node = node;
|
|
- mp->size = size;
|
|
+ mp->size = tmp;
|
|
mp->blk_size = WD_MEMPOOL_BLOCK_SIZE;
|
|
|
|
ret = alloc_mem_from_hugepage(mp);
|
|
diff --git a/wd_util.c b/wd_util.c
|
|
index 43cedc6..8bda8d7 100644
|
|
--- a/wd_util.c
|
|
+++ b/wd_util.c
|
|
@@ -162,12 +162,13 @@ void wd_clear_ctx_config(struct wd_ctx_config_internal *in)
|
|
|
|
void wd_memset_zero(void *data, __u32 size)
|
|
{
|
|
+ __u32 tmp = size;
|
|
char *s = data;
|
|
|
|
if (!s)
|
|
return;
|
|
|
|
- while (size--)
|
|
+ while (tmp--)
|
|
*s++ = 0;
|
|
}
|
|
|
|
--
|
|
2.27.0
|
|
|