libwd/0019-uadk-fix-pthread_spin_init.patch
Yang Shen bd84f97fbf libwd: backport for uadk from 2.3.21 to 2.3.24
Update some patch for uadk from mainline.
To get more infomation, please visit the homepage:
https://github.com/Linaro/uadk

Signed-off-by: Yang Shen <shenyang39@huawei.com>
2022-01-10 08:56:20 +00:00

93 lines
2.7 KiB
Diff

From 913a84cbdce651aea50a6e12117ee93ccbbdbf1c Mon Sep 17 00:00:00 2001
From: Wenkai Lin <linwenkai6@hisilicon.com>
Date: Thu, 30 Dec 2021 12:07:33 +0800
Subject: [PATCH 21/28] uadk: fix pthread_spin_init
pthread_spin_init() may fail with errors,
check return value for it.
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
---
drv/hisi_qm_udrv.c | 16 ++++++++++++----
wd_util.c | 9 +++++++--
2 files changed, 19 insertions(+), 6 deletions(-)
diff --git a/drv/hisi_qm_udrv.c b/drv/hisi_qm_udrv.c
index 8282c51..845fa46 100644
--- a/drv/hisi_qm_udrv.c
+++ b/drv/hisi_qm_udrv.c
@@ -298,7 +298,7 @@ static int hisi_qm_setup_info(struct hisi_qp *qp, struct hisi_qm_priv *config)
ret = hisi_qm_get_qfrs_offs(qp->h_ctx, q_info);
if (ret) {
WD_ERR("get dev qfrs offset fail.\n");
- return ret;
+ goto err_out;
}
ret = hisi_qm_setup_db(qp->h_ctx, q_info);
@@ -323,7 +323,11 @@ static int hisi_qm_setup_info(struct hisi_qp *qp, struct hisi_qm_priv *config)
q_info->region_size[UACCE_QFRT_DUS] - sizeof(uint32_t);
q_info->ds_rx_base = q_info->ds_tx_base - sizeof(uint32_t);
- pthread_spin_init(&q_info->lock, PTHREAD_PROCESS_SHARED);
+ ret = pthread_spin_init(&q_info->lock, PTHREAD_PROCESS_SHARED);
+ if (ret) {
+ WD_ERR("init qinfo lock fail\n");
+ goto err_out;
+ }
return 0;
@@ -560,7 +564,7 @@ static struct hisi_sgl *hisi_qm_align_sgl(const void *sgl, __u32 sge_num)
handle_t hisi_qm_create_sglpool(__u32 sgl_num, __u32 sge_num)
{
struct hisi_sgl_pool *sgl_pool;
- int i;
+ int i, ret;
if (!sgl_num || !sge_num || sge_num > HISI_SGE_NUM_IN_SGL) {
WD_ERR("create sgl_pool failed, sgl_num=%u, sge_num=%u\n",
@@ -601,7 +605,11 @@ handle_t hisi_qm_create_sglpool(__u32 sgl_num, __u32 sge_num)
sgl_pool->sge_num = sge_num;
sgl_pool->depth = sgl_num;
sgl_pool->top = sgl_num;
- pthread_spin_init(&sgl_pool->lock, PTHREAD_PROCESS_SHARED);
+ ret = pthread_spin_init(&sgl_pool->lock, PTHREAD_PROCESS_SHARED);
+ if (ret) {
+ WD_ERR("init sgl pool lock failed.\n");
+ goto err_out;
+ }
return (handle_t)sgl_pool;
diff --git a/wd_util.c b/wd_util.c
index 62f9359..83c77c4 100644
--- a/wd_util.c
+++ b/wd_util.c
@@ -68,7 +68,7 @@ int wd_init_ctx_config(struct wd_ctx_config_internal *in,
struct wd_ctx_config *cfg)
{
struct wd_ctx_internal *ctxs;
- int i;
+ int i, ret;
if (!cfg->ctx_num) {
WD_ERR("invalid parameters, ctx_num is 0!\n");
@@ -93,7 +93,12 @@ int wd_init_ctx_config(struct wd_ctx_config_internal *in,
}
clone_ctx_to_internal(cfg->ctxs + i, ctxs + i);
- pthread_spin_init(&ctxs[i].lock, PTHREAD_PROCESS_SHARED);
+ ret = pthread_spin_init(&ctxs[i].lock, PTHREAD_PROCESS_SHARED);
+ if (ret) {
+ WD_ERR("init ctxs lock failed!\n");
+ free(ctxs);
+ return ret;
+ }
}
in->ctxs = ctxs;
--
2.31.1