[PATCH v3 10/65] dma/skeleton: use kvargs numeric helpers

fengchengwen fengchengwen at huawei.com
Sat Oct 10 04:40:46 CEST 2026


On 10/1/2026 6:40 AM, Stephen Hemminger wrote:
> The lcore argument is converted with atoi(), which validates nothing:
> a malformed value such as "abc" becomes zero, and the range check that
> follows only catches a value which happens to land outside it.
> 
> Use rte_kvargs_to_int() with the lcore range, and log the key and the
> range when it does not fit.
> 
> The parsing function returns void and probe does not fail on a bad
> argument, which is left alone here: an unusable lcore still falls back
> to the default. Only the "Parse lcore_id" message is now skipped when
> the conversion failed, since it reported a value which had not been
> parsed at all.
> 
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
>  drivers/dma/skeleton/skeleton_dmadev.c | 23 ++++++++++++++---------
>  1 file changed, 14 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/dma/skeleton/skeleton_dmadev.c b/drivers/dma/skeleton/skeleton_dmadev.c
> index e287802eb9..44158d5a7f 100644
> --- a/drivers/dma/skeleton/skeleton_dmadev.c
> +++ b/drivers/dma/skeleton/skeleton_dmadev.c
> @@ -638,19 +638,24 @@ skeldma_destroy(const char *name)
>  }
>  
>  static int
> -skeldma_parse_lcore(const char *key __rte_unused,
> +skeldma_parse_lcore(const char *key,
>  		    const char *value,
>  		    void *opaque)
>  {
> -	int lcore_id;
> +	int64_t lcore_id;
> +	int ret;
>  
> -	if (value == NULL || opaque == NULL)
> +	if (opaque == NULL)
>  		return -EINVAL;
>  
> -	lcore_id = atoi(value);
> -	if (lcore_id >= 0 && lcore_id < RTE_MAX_LCORE)
> -		*(int *)opaque = lcore_id;
> +	ret = rte_kvargs_to_int(value, 0, RTE_MAX_LCORE - 1, &lcore_id);
> +	if (ret < 0) {

Why not if (ret != 0) ?

Thanks

> +		SKELDMA_LOG(ERR, "Invalid %s, must be 0..%u", key,
> +			    RTE_MAX_LCORE - 1);
> +		return ret;
> +	}
>  
> +	*(int *)opaque = lcore_id;
>  	return 0;
>  }
>  
> @@ -673,9 +678,9 @@ skeldma_parse_vdev_args(struct rte_vdev_device *vdev, int *lcore_id)
>  	if (!kvlist)
>  		return;
>  
> -	(void)rte_kvargs_process(kvlist, SKELDMA_ARG_LCORE,
> -				 skeldma_parse_lcore, lcore_id);
> -	SKELDMA_LOG(INFO, "Parse lcore_id = %d", *lcore_id);
> +	if (rte_kvargs_process(kvlist, SKELDMA_ARG_LCORE,
> +			       skeldma_parse_lcore, lcore_id) == 0)
> +		SKELDMA_LOG(INFO, "Parse lcore_id = %d", *lcore_id);
>  
>  	rte_kvargs_free(kvlist);
>  }



More information about the dev mailing list