libwd/0129-uadk-add-WD_DEV_ERR-api.patch
Yang Shen ec2f993b84 libwd: backport for uadk from 2.3.31 to 2.3.36
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>
2022-07-28 15:32:23 +08:00

250 lines
7.7 KiB
Diff

From 2884d11a6307d239f72515309b565132c97f1172 Mon Sep 17 00:00:00 2001
From: Kai Ye <yekai13@huawei.com>
Date: Wed, 22 Jun 2022 10:26:32 +0800
Subject: [PATCH 142/183] uadk: add WD_DEV_ERR api
This interface supports device differentiation by the handle of.
context. Users can use the api if they have requested the ctx.
Otherwise, occurred an error.
Signed-off-by: Kai Ye <yekai13@huawei.com>
---
drv/hisi_hpre.c | 4 ----
drv/hisi_qm_udrv.c | 33 +++++++++++++++++----------------
include/hisi_qm_udrv.h | 5 +++++
include/wd.h | 14 ++++++++++++++
wd.c | 10 ++++++++++
5 files changed, 46 insertions(+), 20 deletions(-)
diff --git a/drv/hisi_hpre.c b/drv/hisi_hpre.c
index 7fd4189..d503d84 100644
--- a/drv/hisi_hpre.c
+++ b/drv/hisi_hpre.c
@@ -44,10 +44,6 @@
#define GEN_PARAMS_SZ(key_size) ((key_size) << 1)
#define CRT_PARAM_SZ(key_size) ((key_size) >> 1)
-#define container_of(ptr, type, member) ({ \
- typeof(((type *)0)->member)(*__mptr) = (ptr); \
- (type *)((char *)__mptr - offsetof(type, member)); })
-
enum hpre_alg_type {
HPRE_ALG_NC_NCRT = 0x0,
HPRE_ALG_NC_CRT = 0x1,
diff --git a/drv/hisi_qm_udrv.c b/drv/hisi_qm_udrv.c
index 985aecc..9eaf60c 100644
--- a/drv/hisi_qm_udrv.c
+++ b/drv/hisi_qm_udrv.c
@@ -167,14 +167,14 @@ static int hisi_qm_setup_region(handle_t h_ctx,
{
q_info->sq_base = wd_ctx_mmap_qfr(h_ctx, UACCE_QFRT_DUS);
if (!q_info->sq_base) {
- WD_ERR("failed to mmap dus!\n");
+ WD_DEV_ERR(h_ctx, "failed to mmap dus!\n");
return -WD_ENOMEM;
}
q_info->mmio_base = wd_ctx_mmap_qfr(h_ctx, UACCE_QFRT_MMIO);
if (!q_info->mmio_base) {
wd_ctx_unmap_qfr(h_ctx, UACCE_QFRT_DUS);
- WD_ERR("failed to mmap mmio!\n");
+ WD_DEV_ERR(h_ctx, "failed to mmap mmio!\n");
return -WD_ENOMEM;
}
@@ -197,14 +197,14 @@ static __u32 get_version_id(handle_t h_ctx)
api_name = wd_ctx_get_api(h_ctx);
if (!api_name || strlen(api_name) <= VERSION_ID_SHIFT) {
- WD_ERR("invalid: api name is %s!\n", api_name);
+ WD_DEV_ERR(h_ctx, "invalid: api name is %s!\n", api_name);
return 0;
}
id = api_name + VERSION_ID_SHIFT;
ver = strtoul(id, NULL, 10);
if (!ver || ver == ULONG_MAX) {
- WD_ERR("failed to strtoul, ver = %lu!\n", ver);
+ WD_DEV_ERR(h_ctx, "failed to strtoul, ver = %lu!\n", ver);
return 0;
}
@@ -250,7 +250,7 @@ static int his_qm_set_qp_ctx(handle_t h_ctx, struct hisi_qm_priv *config,
q_info->qc_type = qp_ctx.qc_type;
ret = wd_ctx_set_io_cmd(h_ctx, UACCE_CMD_QM_SET_QP_CTX, &qp_ctx);
if (ret < 0) {
- WD_ERR("failed to set qc_type, use default value!\n");
+ WD_DEV_ERR(h_ctx, "failed to set qc_type, use default value!\n");
return ret;
}
@@ -267,14 +267,14 @@ static int hisi_qm_get_qfrs_offs(handle_t h_ctx,
type = UACCE_QFRT_DUS;
q_info->region_size[type] = wd_ctx_get_region_size(h_ctx, type);
if (!q_info->region_size[type]) {
- WD_ERR("failed to get DUS qfrs offset!\n");
+ WD_DEV_ERR(h_ctx, "failed to get DUS qfrs offset!\n");
return -WD_EINVAL;
}
type = UACCE_QFRT_MMIO;
q_info->region_size[type] = wd_ctx_get_region_size(h_ctx, type);
if (!q_info->region_size[type]) {
- WD_ERR("failed to get MMIO qfrs offset!\n");
+ WD_DEV_ERR(h_ctx, "failed to get MMIO qfrs offset!\n");
return -WD_EINVAL;
}
@@ -289,25 +289,25 @@ static int hisi_qm_setup_info(struct hisi_qp *qp, struct hisi_qm_priv *config)
q_info = &qp->q_info;
ret = hisi_qm_setup_region(qp->h_ctx, q_info);
if (ret) {
- WD_ERR("failed to setup region!\n");
+ WD_DEV_ERR(qp->h_ctx, "failed to setup region!\n");
return ret;
}
ret = hisi_qm_get_qfrs_offs(qp->h_ctx, q_info);
if (ret) {
- WD_ERR("failed to get dev qfrs offset!\n");
+ WD_DEV_ERR(qp->h_ctx, "failed to get dev qfrs offset!\n");
goto err_out;
}
ret = hisi_qm_setup_db(qp->h_ctx, q_info);
if (ret) {
- WD_ERR("failed to setup db!\n");
+ WD_DEV_ERR(qp->h_ctx, "failed to setup db!\n");
goto err_out;
}
ret = his_qm_set_qp_ctx(qp->h_ctx, config, q_info);
if (ret) {
- WD_ERR("failed to setup io cmd!\n");
+ WD_DEV_ERR(qp->h_ctx, "failed to setup io cmd!\n");
goto err_out;
}
@@ -324,7 +324,7 @@ static int hisi_qm_setup_info(struct hisi_qp *qp, struct hisi_qm_priv *config)
ret = pthread_spin_init(&q_info->lock, PTHREAD_PROCESS_SHARED);
if (ret) {
- WD_ERR("failed to init qinfo lock!\n");
+ WD_DEV_ERR(qp->h_ctx, "failed to init qinfo lock!\n");
goto err_out;
}
@@ -455,6 +455,7 @@ int hisi_qm_send(handle_t h_qp, const void *req, __u16 expect, __u16 *count)
static int hisi_qm_recv_single(struct hisi_qm_queue_info *q_info, void *resp)
{
+ struct hisi_qp *qp = container_of(q_info, struct hisi_qp, q_info);
struct cqe *cqe;
__u16 i, j;
@@ -466,7 +467,7 @@ static int hisi_qm_recv_single(struct hisi_qm_queue_info *q_info, void *resp)
j = CQE_SQ_HEAD_INDEX(cqe);
if (j >= QM_Q_DEPTH) {
pthread_spin_unlock(&q_info->lock);
- WD_ERR("CQE_SQ_HEAD_INDEX(%u) error!\n", j);
+ WD_DEV_ERR(qp->h_ctx, "CQE_SQ_HEAD_INDEX(%u) error!\n", j);
return -WD_EIO;
}
memcpy(resp, (void *)((uintptr_t)q_info->sq_base +
@@ -510,7 +511,7 @@ int hisi_qm_recv(handle_t h_qp, void *resp, __u16 expect, __u16 *count)
q_info = &qp->q_info;
if (wd_ioread32(q_info->ds_rx_base) == 1) {
- WD_ERR("wd queue hw error happened before qm receive!\n");
+ WD_DEV_ERR(qp->h_ctx, "wd queue hw error happened before qm receive!\n");
return -WD_HW_EACCESS;
}
@@ -524,7 +525,7 @@ int hisi_qm_recv(handle_t h_qp, void *resp, __u16 expect, __u16 *count)
*count = recv_num++;
if (wd_ioread32(q_info->ds_rx_base) == 1) {
- WD_ERR("wd queue hw error happened in qm receive!\n");
+ WD_DEV_ERR(qp->h_ctx, "wd queue hw error happened in qm receive!\n");
return -WD_HW_EACCESS;
}
@@ -537,7 +538,7 @@ int hisi_check_bd_id(handle_t h_qp, __u32 mid, __u32 bid)
__u8 mode = qp->q_info.qp_mode;
if (mode == CTX_MODE_SYNC && mid != bid) {
- WD_ERR("failed to recv self bd, send id: %u, recv id: %u\n",
+ WD_DEV_ERR(qp->h_ctx, "failed to recv self bd, send id: %u, recv id: %u\n",
mid, bid);
return -WD_EINVAL;
}
diff --git a/include/hisi_qm_udrv.h b/include/hisi_qm_udrv.h
index ea5807e..0ea17c6 100644
--- a/include/hisi_qm_udrv.h
+++ b/include/hisi_qm_udrv.h
@@ -29,6 +29,11 @@ extern "C" {
#define BYTE_BITS 8
#define BYTE_BITS_SHIFT 3
+#define __offsetof(t, m) ((size_t)(uintptr_t)&((t *)0)->m)
+#define container_of(ptr, type, member) ({ \
+ typeof(((type *)0)->member)(*__mptr) = (ptr); \
+ (type *)((char *)__mptr - __offsetof(type, member)); })
+
enum hisi_qm_sgl_copy_dir {
COPY_SGL_TO_PBUFF,
COPY_PBUFF_TO_SGL
diff --git a/include/wd.h b/include/wd.h
index b8044a4..b0580ba 100644
--- a/include/wd.h
+++ b/include/wd.h
@@ -57,6 +57,13 @@ typedef void (*wd_log)(const char *format, ...);
#define WD_ERR(fmt, args...) fprintf(stderr, fmt, ##args)
#endif
+/* @h_ctx: The handle of context. */
+#define WD_DEV_ERR(h_ctx, format, args...)\
+ do { \
+ char *dev_name = wd_ctx_get_dev_name(h_ctx); \
+ WD_ERR("%s: "format"\n", dev_name, ##args); \
+ } while (0)
+
#define WD_CONSOLE printf
/* WD error code */
@@ -496,6 +503,13 @@ void wd_mempool_stats(handle_t mempool, struct wd_mempool_stats *stats);
*/
void wd_blockpool_stats(handle_t blkpool, struct wd_blockpool_stats *stats);
+/**
+ * wd_ctx_get_dev_name() - Get the device name about task.
+ * @h_ctx: The handle of context.
+ * Return device name.
+ */
+char *wd_ctx_get_dev_name(handle_t h_ctx);
+
/**
* wd_get_version() - Get the libwd version number and released time.
*/
diff --git a/wd.c b/wd.c
index 9715e10..b0c3dec 100644
--- a/wd.c
+++ b/wd.c
@@ -826,3 +826,13 @@ bool wd_need_info(void)
{
return uadk_log_level >= WD_LOG_INFO;
}
+
+char *wd_ctx_get_dev_name(handle_t h_ctx)
+{
+ struct wd_ctx_h *ctx = (struct wd_ctx_h *)h_ctx;
+
+ if (!ctx)
+ return NULL;
+
+ return ctx->dev_name;
+}
--
2.27.0