On 3/26/2026 6:24 PM, David Marchand wrote:
> Each bus reimplements some similar devargs lookup code.
>
> The differences are in how some bus (PCI, VMBUS etc...) normalizes the
> device names. We can't use the .parse existing handler from outside the
> bus code itself, as the size of the bus specific device location address
> is unknown.
> Introduce a bus specific helper to compare two device names and
> hide this ugly detail.
>
> Signed-off-by: David Marchand <[email protected]>
> Acked-by: Bruce Richardson <[email protected]>
> Acked-by: Hemant Agrawal <[email protected]>
> Tested-by: Maxime Leroy <[email protected]>
> ---
...
> diff --git a/drivers/bus/uacce/uacce.c b/drivers/bus/uacce/uacce.c
> index 06a3643290..e6963dc18a 100644
> --- a/drivers/bus/uacce/uacce.c
> +++ b/drivers/bus/uacce/uacce.c
> @@ -70,25 +70,10 @@ extern int uacce_bus_logtype;
> #define UACCE_BUS_DEBUG(fmt, ...) UACCE_BUS_LOG(DEBUG, fmt, ##__VA_ARGS__)
>
>
> -static struct rte_devargs *
> -uacce_devargs_lookup(const char *dev_name)
> -{
> - char name[RTE_UACCE_DEV_PATH_SIZE] = {0};
> - struct rte_devargs *devargs;
> -
> - snprintf(name, sizeof(name), "%s%s", UACCE_DEV_PREFIX, dev_name);
For uacce, application should pass device with prefix uacce, e.g:
dpdk-testpmd -a uacce:hisi_zip-0,queues=2 --file-prefix=feng -- -i
And the scan device is hisi_zip-0, so in match we should combined which is
above snprintf does.
> - RTE_EAL_DEVARGS_FOREACH(uacce_bus.bus.name, devargs) {
> - if (strcmp(devargs->name, name) == 0)
> - return devargs;
> - }
> -
> - return NULL;
> -}
> -
> static bool
> uacce_ignore_device(const char *dev_name)
> {
> - struct rte_devargs *devargs = uacce_devargs_lookup(dev_name);
> + struct rte_devargs *devargs = rte_bus_find_devargs(&uacce_bus.bus,
> dev_name);
>
...
>
> return retval;
> diff --git a/lib/eal/common/eal_common_bus.c b/lib/eal/common/eal_common_bus.c
>
> +RTE_EXPORT_INTERNAL_SYMBOL(rte_bus_find_devargs)
> +struct rte_devargs *
> +rte_bus_find_devargs(const struct rte_bus *bus, const char *name)
> +{
> + rte_bus_devname_compare_t cmp = bus->devname_compare;
> + struct rte_devargs *devargs;
> +
> + if (cmp == NULL)
> + cmp = strcmp;
> +
> + RTE_EAL_DEVARGS_FOREACH(rte_bus_name(bus), devargs) {
> + if (cmp(name, devargs->name) != 0)
> + continue;
> + return devargs;
> + }
> +
> + return NULL;
> +}
> +
...