[PATCH] uadk: fix the issue of excessive memory allocation in reserved memory

From: Chenghai Huang <huangchenghai2@huawei.com> It just need to align with 1M, but here currently, memory of a size that is a multiple of 1M has been requested. Signed-off-by: Chenghai Huang <huangchenghai2@huawei.com> --- v1/wd_bmm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/v1/wd_bmm.c b/v1/wd_bmm.c index cdf5f0b..c58484f 100644 --- a/v1/wd_bmm.c +++ b/v1/wd_bmm.c @@ -116,12 +116,13 @@ static int wd_pool_pre_layout(struct wd_queue *q, p->act_mem_sz = (p->act_hd_sz + p->act_blk_sz) * (unsigned long)sp->block_num + asz; - /* When we use WD reserve memory and the blk_sz is larger than 1M, + /* + * When we use WD reserve memory and the blk_sz is larger than 1M, * in order to ensure the mem_pool to be success, - * we should to reserve more memory + * ensure that the allocated memory is an integer multiple of 1M. */ if (!sp->br.alloc && !qinfo->iommu_type) - p->act_mem_sz *= (1 + p->act_blk_sz / BLK_BALANCE_SZ); + p->act_mem_sz = (p->act_mem_sz + BLK_BALANCE_SZ - 1) & ~(BLK_BALANCE_SZ - 1); return WD_SUCCESS; } -- 2.33.0

From: Zhushuai Yin <yinzhushuai@huawei.com> After closing the driver, internal variables need to be reset to prevent missing the reset operation when calling external interfaces. Signed-off-by: Zhushuai Yin <yinzhushuai@huawei.com> --- wd_aead.c | 2 +- wd_agg.c | 2 +- wd_cipher.c | 2 +- wd_comp.c | 2 +- wd_dh.c | 2 +- wd_digest.c | 2 +- wd_ecc.c | 2 +- wd_join_gather.c | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/wd_aead.c b/wd_aead.c index 4ff7fd7..b10890f 100644 --- a/wd_aead.c +++ b/wd_aead.c @@ -67,6 +67,7 @@ static void wd_aead_close_driver(int init_type) #ifndef WD_STATIC_DRV if (init_type == WD_TYPE_V2) { wd_dlclose_drv(wd_aead_setting.dlh_list); + wd_aead_setting.dlh_list = NULL; return; } @@ -648,7 +649,6 @@ void wd_aead_uninit2(void) wd_alg_attrs_uninit(&wd_aead_init_attrs); wd_alg_drv_unbind(wd_aead_setting.driver); wd_aead_close_driver(WD_TYPE_V2); - wd_aead_setting.dlh_list = NULL; wd_alg_clear_init(&wd_aead_setting.status); } diff --git a/wd_agg.c b/wd_agg.c index 686e739..85fb7f6 100644 --- a/wd_agg.c +++ b/wd_agg.c @@ -76,6 +76,7 @@ static void wd_agg_close_driver(void) { #ifndef WD_STATIC_DRV wd_dlclose_drv(wd_agg_setting.dlh_list); + wd_agg_setting.dlh_list = NULL; #else wd_release_drv(wd_agg_setting.driver); hisi_dae_remove(); @@ -725,7 +726,6 @@ void wd_agg_uninit(void) wd_alg_attrs_uninit(&wd_agg_init_attrs); wd_alg_drv_unbind(wd_agg_setting.driver); wd_agg_close_driver(); - wd_agg_setting.dlh_list = NULL; wd_alg_clear_init(&wd_agg_setting.status); } diff --git a/wd_cipher.c b/wd_cipher.c index 95d6eb6..ef54dc8 100644 --- a/wd_cipher.c +++ b/wd_cipher.c @@ -76,6 +76,7 @@ static void wd_cipher_close_driver(int init_type) #ifndef WD_STATIC_DRV if (init_type == WD_TYPE_V2) { wd_dlclose_drv(wd_cipher_setting.dlh_list); + wd_cipher_setting.dlh_list = NULL; return; } @@ -521,7 +522,6 @@ void wd_cipher_uninit2(void) wd_alg_attrs_uninit(&wd_cipher_init_attrs); wd_alg_drv_unbind(wd_cipher_setting.driver); wd_cipher_close_driver(WD_TYPE_V2); - wd_cipher_setting.dlh_list = NULL; wd_alg_clear_init(&wd_cipher_setting.status); } diff --git a/wd_comp.c b/wd_comp.c index 112c97b..ac0470f 100644 --- a/wd_comp.c +++ b/wd_comp.c @@ -61,6 +61,7 @@ static void wd_comp_close_driver(int init_type) #ifndef WD_STATIC_DRV if (init_type == WD_TYPE_V2) { wd_dlclose_drv(wd_comp_setting.dlh_list); + wd_comp_setting.dlh_list = NULL; return; } @@ -345,7 +346,6 @@ void wd_comp_uninit2(void) wd_alg_attrs_uninit(&wd_comp_init_attrs); wd_alg_drv_unbind(wd_comp_setting.driver); wd_comp_close_driver(WD_TYPE_V2); - wd_comp_setting.dlh_list = NULL; wd_alg_clear_init(&wd_comp_setting.status); } diff --git a/wd_dh.c b/wd_dh.c index abef811..2c88ce2 100644 --- a/wd_dh.c +++ b/wd_dh.c @@ -46,6 +46,7 @@ static void wd_dh_close_driver(int init_type) #ifndef WD_STATIC_DRV if (init_type == WD_TYPE_V2) { wd_dlclose_drv(wd_dh_setting.dlh_list); + wd_dh_setting.dlh_list = NULL; return; } @@ -315,7 +316,6 @@ void wd_dh_uninit2(void) wd_alg_attrs_uninit(&wd_dh_init_attrs); wd_alg_drv_unbind(wd_dh_setting.driver); wd_dh_close_driver(WD_TYPE_V2); - wd_dh_setting.dlh_list = NULL; wd_alg_clear_init(&wd_dh_setting.status); } diff --git a/wd_digest.c b/wd_digest.c index 4c1b0ca..cb0a111 100644 --- a/wd_digest.c +++ b/wd_digest.c @@ -78,6 +78,7 @@ static void wd_digest_close_driver(int init_type) #ifndef WD_STATIC_DRV if (init_type == WD_TYPE_V2) { wd_dlclose_drv(wd_digest_setting.dlh_list); + wd_digest_setting.dlh_list = NULL; return; } @@ -457,7 +458,6 @@ void wd_digest_uninit2(void) wd_alg_attrs_uninit(&wd_digest_init_attrs); wd_alg_drv_unbind(wd_digest_setting.driver); wd_digest_close_driver(WD_TYPE_V2); - wd_digest_setting.dlh_list = NULL; wd_alg_clear_init(&wd_digest_setting.status); } diff --git a/wd_ecc.c b/wd_ecc.c index 58bc184..2a1228d 100644 --- a/wd_ecc.c +++ b/wd_ecc.c @@ -103,6 +103,7 @@ static void wd_ecc_close_driver(int init_type) #ifndef WD_STATIC_DRV if (init_type == WD_TYPE_V2) { wd_dlclose_drv(wd_ecc_setting.dlh_list); + wd_ecc_setting.dlh_list = NULL; return; } @@ -383,7 +384,6 @@ void wd_ecc_uninit2(void) wd_alg_attrs_uninit(&wd_ecc_init_attrs); wd_alg_drv_unbind(wd_ecc_setting.driver); wd_ecc_close_driver(WD_TYPE_V2); - wd_ecc_setting.dlh_list = NULL; wd_alg_clear_init(&wd_ecc_setting.status); } diff --git a/wd_join_gather.c b/wd_join_gather.c index 616d039..a845e03 100644 --- a/wd_join_gather.c +++ b/wd_join_gather.c @@ -77,6 +77,7 @@ static void wd_join_gather_close_driver(void) { #ifndef WD_STATIC_DRV wd_dlclose_drv(wd_join_gather_setting.dlh_list); + wd_join_gather_setting.dlh_list = NULL; #else wd_release_drv(wd_join_gather_setting.driver); hisi_dae_join_gather_remove(); @@ -831,7 +832,6 @@ void wd_join_gather_uninit(void) wd_alg_attrs_uninit(&wd_join_gather_init_attrs); wd_alg_drv_unbind(wd_join_gather_setting.driver); wd_join_gather_close_driver(); - wd_join_gather_setting.dlh_list = NULL; wd_alg_clear_init(&wd_join_gather_setting.status); } -- 2.33.0

From: Zhushuai Yin <yinzhushuai@huawei.com> fix the issue in the code where variable accumulation might exceed u32, as well as some spelling errors. Signed-off-by: Zhushuai Yin <yinzhushuai@huawei.com> --- drv/hisi_qm_udrv.c | 2 +- drv/isa_ce_sm3.c | 2 +- wd_rsa.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/drv/hisi_qm_udrv.c b/drv/hisi_qm_udrv.c index 304764e..70a6698 100644 --- a/drv/hisi_qm_udrv.c +++ b/drv/hisi_qm_udrv.c @@ -992,7 +992,7 @@ void hisi_qm_sgl_copy(void *pbuff, void *hw_sgl, __u32 offset, __u32 size, struct hisi_sgl *tmp = hw_sgl; int begin_sge = 0, i; __u32 sge_offset = 0; - __u32 len = 0; + __u64 len = 0; if (!pbuff || !size || !tmp) return; diff --git a/drv/isa_ce_sm3.c b/drv/isa_ce_sm3.c index 0e88b61..8d23061 100644 --- a/drv/isa_ce_sm3.c +++ b/drv/isa_ce_sm3.c @@ -386,7 +386,7 @@ static int sm3_ce_drv_init(struct wd_alg_driver *drv, void *conf) priv = malloc(sizeof(struct sm3_ce_drv_ctx)); if (!priv) - return -WD_EINVAL; + return -WD_ENOMEM; config->epoll_en = 0; memcpy(&priv->config, config, sizeof(struct wd_ctx_config_internal)); diff --git a/wd_rsa.c b/wd_rsa.c index 9fa01c5..4cb72fc 100644 --- a/wd_rsa.c +++ b/wd_rsa.c @@ -87,6 +87,7 @@ static void wd_rsa_close_driver(int init_type) #ifndef WD_STATIC_DRV if (init_type == WD_TYPE_V2) { wd_dlclose_drv(wd_rsa_setting.dlh_list); + wd_rsa_setting.dlh_list = NULL; return; } @@ -355,7 +356,6 @@ void wd_rsa_uninit2(void) wd_alg_attrs_uninit(&wd_rsa_init_attrs); wd_alg_drv_unbind(wd_rsa_setting.driver); wd_rsa_close_driver(WD_TYPE_V2); - wd_rsa_setting.dlh_list = NULL; wd_alg_clear_init(&wd_rsa_setting.status); } -- 2.33.0
participants (1)
-
ZongYu Wu