[EXTERNAL] [PATCH v3 4/9] bus/vmbus: use common sysfs routines

Wei Hu weh at microsoft.com
Wed Sep 16 08:52:57 CEST 2026



> -----Original Message-----
> From: Stephen Hemminger <stephen at networkplumber.org>
> Sent: Tuesday, September 15, 2026 1:36 AM
> To: dev at dpdk.org
> Cc: Stephen Hemminger <stephen at networkplumber.org>; Long Li
> <longli at microsoft.com>; Wei Hu <weh at microsoft.com>
> Subject: [EXTERNAL] [PATCH v3 4/9] bus/vmbus: use common sysfs routines
> 
> Replace the open coded read in vmbus_uio_sysfs_read() with the EAL routine.
> The range check and the -ERANGE return are unchanged.
> 
> Two things do change. On an open failure the helper now returns -EIO rather
> than -errno; both callers only pass it to strerror(-err) in a log message, so this is
> message text only. And subchannel_id and monitor_id were read with
> fscanf("%u") and are now converted with base 0, so a value with a leading
> zero would parse as octal. Neither attribute is printed with leading zeros by the
> kernel.
> 
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>

Reviewed-by: Wei Hu <weh at microsoft.com>

> ---
>  drivers/bus/vmbus/linux/vmbus_uio.c | 24 +++++-------------------
>  1 file changed, 5 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/bus/vmbus/linux/vmbus_uio.c
> b/drivers/bus/vmbus/linux/vmbus_uio.c
> index fbafc5027d..50e58f9b65 100644
> --- a/drivers/bus/vmbus/linux/vmbus_uio.c
> +++ b/drivers/bus/vmbus/linux/vmbus_uio.c
> @@ -18,6 +18,7 @@
>  #include <rte_malloc.h>
>  #include <rte_bus_vmbus.h>
>  #include <rte_string_fns.h>
> +#include <rte_sysfs.h>
> 
>  #include "private.h"
> 
> @@ -334,27 +335,12 @@ int vmbus_uio_map_rings(struct vmbus_channel
> *chan)  static int vmbus_uio_sysfs_read(const char *dir, const char *name,
>  				unsigned long *val, unsigned long max_range)
> {
> -	char path[PATH_MAX];
> -	FILE *f;
> -	int ret;
> -
> -	snprintf(path, sizeof(path), "%s/%s", dir, name);
> -	f = fopen(path, "r");
> -	if (!f) {
> -		VMBUS_LOG(ERR, "can't open %s:%s",
> -			  path, strerror(errno));
> -		return -errno;
> +	if (rte_sysfs_parse_uint(val, "%s/%s", dir, name) < 0) {
> +		VMBUS_LOG(ERR, "can't read %s/%s", dir, name);
> +		return -EIO;
>  	}
> 
> -	if (fscanf(f, "%lu", val) != 1)
> -		ret = -EIO;
> -	else if (*val > max_range)
> -		ret = -ERANGE;
> -	else
> -		ret = 0;
> -	fclose(f);
> -
> -	return ret;
> +	return *val > max_range ? -ERANGE : 0;
>  }
> 
>  static bool vmbus_uio_ring_present(const struct rte_vmbus_device *dev,
> --
> 2.53.0



More information about the dev mailing list