[Accel-config] Re: [PATCH] accel-config: Add API to return uacce device path

Dave Jiang <dave.jiang at intel.com>
Newsgroups dev.linux.lists.accel-config
Message-ID <[email protected]>
On 4/5/2021 5:40 PM, ramesh.thomas(a)intel.com wrote:
> From: Ramesh Thomas <ramesh.thomas(a)intel.com>
>
> Return path to uacce device path for user wqs. This includes support for
> legacy mode device names.
>
> Signed-off-by: Ramesh Thomas <ramesh.thomas(a)intel.com>
> ---
>   accfg/lib/libaccel-config.sym |  5 ++++
>   accfg/lib/libaccfg.c          | 55 +++++++++++++++++++++++++++++++++++
>   accfg/libaccel_config.h       |  1 +
>   3 files changed, 61 insertions(+)
>
> diff --git a/accfg/lib/libaccel-config.sym b/accfg/lib/libaccel-config.sym
> index 4de2a49..a28ac97 100644
> --- a/accfg/lib/libaccel-config.sym
> +++ b/accfg/lib/libaccel-config.sym
> @@ -141,3 +141,8 @@ global:
>   	accfg_remove_mdev;
>   	accfg_device_get_mdev_enabled;
>   } LIBACCFG_6;
> +
> +LIBACCFG_8 {
> +global:
> +	accfg_wq_get_uacce_path;

I wonder instead of have a specific call to uacce 
accfg_wq_get_uacce_path, we should just have 
accfg_wq_get_user_dev_path(). And it's capable of providing a path for 
legacy or uacce. And we can get users to just move over to that. The 
user really shouldn't care if it's uacce or something else.


> +} LIBACCFG_7;
> diff --git a/accfg/lib/libaccfg.c b/accfg/lib/libaccfg.c
> index 1d89d4c..dd0219c 100644
> --- a/accfg/lib/libaccfg.c
> +++ b/accfg/lib/libaccfg.c
> @@ -25,6 +25,7 @@
>   #include <ccan/build_assert/build_assert.h>
>   #include <util/sysfs.h>
>   #include <accfg/libaccel_config.h>
> +#include <fnmatch.h>
>   #include "private.h"
>   
>   #define MDEV_POSTFIX "mdev_supported_types"
> @@ -2099,6 +2100,60 @@ ACCFG_EXPORT int accfg_wq_size_boundary(struct accfg_device *device,
>   	return 0;
>   }
>   
> +ACCFG_EXPORT int accfg_wq_get_uacce_path(struct accfg_wq *wq, char *buf,
> +		size_t size)
> +{
> +	struct dirent **d;
> +	int n, n1;
> +	char *f;
> +	char p[PATH_MAX];
> +	struct accfg_ctx *ctx;
> +	int rc = 0;
> +
> +	ctx = accfg_device_get_ctx(wq->device);
> +
> +	sprintf(p, "/dev/%s", wq->device->bus_type_str);
> +	n1 = n = scandir(p, &d, NULL, alphasort);
> +	if (n < 0) {
> +		err(ctx, "UACCE device path not found %s\n", p);
> +		return -ENOENT;
> +	}
> +
> +	sprintf(p, "%s-*", accfg_wq_get_devname(wq));
> +
> +	while (n--) {
> +		f = &d[n]->d_name[0];
> +
> +		if (!fnmatch(p, f, 0) || !strcmp(accfg_wq_get_devname(wq), f))
> +			break;
> +	}
> +
> +	if (n < 0) {
> +		err(ctx, "UACCE device for %s not found at /dev/%s\n",
> +				accfg_wq_get_devname(wq),
> +				wq->device->bus_type_str);
> +		rc = -ENOENT;
> +		goto ext_uacce;
> +	}
> +
> +	n = sprintf(p, "/dev/%s/%s", wq->device->bus_type_str, f);
> +
> +	if ((size_t)n >= size) {
> +		err(ctx, "Buffer size too small. Need %d bytes\n", n + 1);
> +		rc = -ERANGE;
> +		goto ext_uacce;
> +	}
> +
> +	strcpy(buf, p);
> +
> +ext_uacce:
> +	while (n1--)
> +		free(d[n1]);
> +	free(d);
> +
> +	return rc;
> +}
> +
>   #define accfg_wq_set_field(wq, val, field) \
>   ACCFG_EXPORT int accfg_wq_set_##field( \
>   		struct accfg_wq *wq, int val) \
> diff --git a/accfg/libaccel_config.h b/accfg/libaccel_config.h
> index 94aef80..e61fd40 100644
> --- a/accfg/libaccel_config.h
> +++ b/accfg/libaccel_config.h
> @@ -276,6 +276,7 @@ int accfg_wq_enable(struct accfg_wq *wq);
>   int accfg_wq_disable(struct accfg_wq *wq, bool force);
>   int accfg_wq_priority_boundary(struct accfg_wq *wq);
>   int accfg_wq_size_boundary(struct accfg_device *device, int wq_num);
> +int accfg_wq_get_uacce_path(struct accfg_wq *wq, char *buf, size_t size);
>   
>   /* libaccfg function for engine */
>   struct accfg_engine;
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.