libwd/0058-uadk-optimize-wd_get_accel_list.patch
Yang Shen aa2d7cce3f libwd: backport for uadk from 2.3.24 to 2.3.27
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-02-21 06:32:14 +00:00

128 lines
3.2 KiB
Diff

From b670d346baac3be4b3b55a481c196abbdaf36bd3 Mon Sep 17 00:00:00 2001
From: Wenkai Lin <linwenkai6@hisilicon.com>
Date: Tue, 15 Feb 2022 11:49:55 +0800
Subject: [PATCH 62/64] uadk: optimize wd_get_accel_list
wd_get_accel_list should skip nosva device,
so add a step to check sva flags, get_dev_info
should not print error info when device is nosva.
Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com>
---
wd.c | 39 +++++++++++++++++++++------------------
1 file changed, 21 insertions(+), 18 deletions(-)
diff --git a/wd.c b/wd.c
index d1652dd..afcf134 100644
--- a/wd.c
+++ b/wd.c
@@ -44,16 +44,18 @@ static int get_raw_attr(const char *dev_root, const char *attr, char *buf,
ssize_t size;
int fd;
- if (!dev_root || !attr || !buf || !sz)
- return -WD_EINVAL;
-
size = snprintf(attr_file, PATH_STR_SIZE, "%s/%s", dev_root, attr);
- if (size < 0)
+ if (size < 0) {
+ WD_ERR("failed to snprintf, dev_root: %s, attr: %s!\n",
+ dev_root, attr);
return -WD_EINVAL;
+ }
ptrRet = realpath(attr_file, attr_path);
- if (ptrRet == NULL)
+ if (ptrRet == NULL) {
+ WD_ERR("failed to resolve path, attr_file: %s!\n", attr_file);
return -WD_ENODEV;
+ }
fd = open(attr_path, O_RDONLY, 0);
if (fd < 0) {
@@ -78,16 +80,15 @@ static int get_int_attr(struct uacce_dev *dev, const char *attr, int *val)
char buf[MAX_ATTR_STR_SIZE] = {0};
int ret;
- if (!dev || !val)
- return -WD_EINVAL;
-
ret = get_raw_attr(dev->dev_root, attr, buf, MAX_ATTR_STR_SIZE - 1);
if (ret < 0)
return ret;
*val = strtol(buf, NULL, 10);
- if (errno == ERANGE)
+ if (errno == ERANGE) {
+ WD_ERR("failed to strtol %s, out of range!\n", buf);
return -errno;
+ }
return 0;
}
@@ -97,9 +98,6 @@ static int get_str_attr(struct uacce_dev *dev, const char *attr, char *buf,
{
int ret;
- if (!dev)
- return -WD_EINVAL;
-
ret = get_raw_attr(dev->dev_root, attr, buf, buf_sz);
if (ret < 0) {
buf[0] = '\0';
@@ -143,13 +141,19 @@ static int get_dev_info(struct uacce_dev *dev)
ret = get_int_attr(dev, "isolate", &value);
if (ret < 0)
return ret;
- else if (value == 1)
+ else if (value == 1) {
+ WD_ERR("skip isolated uacce device!\n");
return -ENODEV;
+ }
}
ret = get_int_attr(dev, "flags", &dev->flags);
if (ret < 0)
return ret;
+ else if (!(dev->flags & UACCE_DEV_SVA)) {
+ WD_ERR("skip none sva uacce device!\n");
+ return -ENODEV;
+ }
ret = get_int_attr(dev, "region_mmio_size", &value);
if (ret < 0)
@@ -211,10 +215,8 @@ static struct uacce_dev *read_uacce_sysfs(const char *dev_name)
goto out_dir;
ret = get_dev_info(dev);
- if (ret < 0) {
- WD_ERR("failed to get dev info: ret = %d!\n", ret);
+ if (ret < 0)
goto out_dir;
- }
break;
}
@@ -529,6 +531,9 @@ int wd_get_avail_ctx(struct uacce_dev *dev)
{
int avail_ctx, ret;
+ if (!dev)
+ return -WD_EINVAL;
+
ret = get_int_attr(dev, "available_instances", &avail_ctx);
if (ret < 0)
return ret;
@@ -551,8 +556,6 @@ static int get_dev_alg_name(const char *d_name, char *dev_alg_name, size_t sz)
ret = get_raw_attr(dev_path, "algorithms", dev_alg_name, sz);
if (ret < 0) {
dev_alg_name[0] = '\0';
- WD_ERR("failed to get alg for %s, ret = %d\n",
- dev_path, ret);
return ret;
}
--
2.25.1