[PATCH 51/62] ml/cnxk: use kvargs numeric helpers in mvtvm
From: Stephen Hemminger <stephen@networkplumber.org>
Date: 2026-09-14 05:54:21
Subsystem:
the rest · Maintainer:
Linus Torvalds
parse_integer_arg() used atoi(), which cannot report an error, so a
malformed value became zero and the negative check never fired.
parse_uint_arg() open coded the errno and end pointer checks.
parse_uint_arg() also stored through a uint32_t pointer, but max_nb_qpairs
is a uint16_t followed by an int in the same struct, so parsing that
argument wrote past the field.
Neither handler did anything beyond a range checked store, so drop them
and pass rte_kvargs_handle_u16() directly for max_qps.
cache_model_data is a boolean, so make the field bool and use
rte_kvargs_handle_bool(), which makes the "< 0 || > 1" check that
followed it dead code. cache_model_data_set stays, since it still
tells an unset argument from one set to false. A bare key now enables
the option, and the usual spellings are accepted.
Bugzilla ID: 2043
Fixes: 48c6081ab4b3 ("ml/cnxk: enable creation of MVTVM virtual device")
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/ml/cnxk/mvtvm_ml_dev.c | 47 ++++------------------------------
drivers/ml/cnxk/mvtvm_ml_dev.h | 2 +-
2 files changed, 6 insertions(+), 43 deletions(-)
diff --git a/drivers/ml/cnxk/mvtvm_ml_dev.c b/drivers/ml/cnxk/mvtvm_ml_dev.c
index 74959a12fc..cbaf17698e 100644
--- a/drivers/ml/cnxk/mvtvm_ml_dev.c
+++ b/drivers/ml/cnxk/mvtvm_ml_dev.c@@ -20,36 +20,6 @@ static const char *const valid_args[] = {MVTVM_ML_DEV_MAX_QPS, MVTVM_ML_DEV_CACHE_MODEL_DATA, NULL}; -static int -parse_integer_arg(const char *key __rte_unused, const char *value, void *extra_args) -{ - int *i = (int *)extra_args; - - *i = atoi(value); - if (*i < 0) { - plt_err("Argument has to be positive."); - return -EINVAL; - } - - return 0; -} - -static int -parse_uint_arg(const char *key __rte_unused, const char *value, void *extra_args) -{ - int i; - char *end; - errno = 0; - - i = strtol(value, &end, 10); - if (*end != 0 || errno != 0 || i < 0) - return -EINVAL; - - *((uint32_t *)extra_args) = i; - - return 0; -} - static int mvtvm_mldev_parse_devargs(const char *args, struct mvtvm_ml_dev *mvtvm_mldev) {
@@ -68,7 +38,7 @@ mvtvm_mldev_parse_devargs(const char *args, struct mvtvm_ml_dev *mvtvm_mldev) } if (rte_kvargs_count(kvlist, MVTVM_ML_DEV_MAX_QPS) == 1) { - ret = rte_kvargs_process(kvlist, MVTVM_ML_DEV_MAX_QPS, &parse_uint_arg, + ret = rte_kvargs_process(kvlist, MVTVM_ML_DEV_MAX_QPS, rte_kvargs_handle_u16, &mvtvm_mldev->max_nb_qpairs); if (ret < 0) { plt_err("Error processing arguments, key = %s", MVTVM_ML_DEV_MAX_QPS);
@@ -79,8 +49,9 @@ mvtvm_mldev_parse_devargs(const char *args, struct mvtvm_ml_dev *mvtvm_mldev) } if (rte_kvargs_count(kvlist, MVTVM_ML_DEV_CACHE_MODEL_DATA) == 1) { - ret = rte_kvargs_process(kvlist, MVTVM_ML_DEV_CACHE_MODEL_DATA, &parse_integer_arg, - &mvtvm_mldev->cache_model_data); + ret = rte_kvargs_process_opt(kvlist, MVTVM_ML_DEV_CACHE_MODEL_DATA, + rte_kvargs_handle_bool, + &mvtvm_mldev->cache_model_data); if (ret < 0) { plt_err("Error processing arguments, key = %s", MVTVM_ML_DEV_CACHE_MODEL_DATA);
@@ -95,16 +66,8 @@ mvtvm_mldev_parse_devargs(const char *args, struct mvtvm_ml_dev *mvtvm_mldev) mvtvm_mldev->max_nb_qpairs = MVTVM_ML_DEV_MAX_QPS_DEFAULT; plt_ml_dbg("ML: %s = %u", MVTVM_ML_DEV_MAX_QPS, mvtvm_mldev->max_nb_qpairs); - if (!cache_model_data_set) { + if (!cache_model_data_set) mvtvm_mldev->cache_model_data = CN10K_ML_DEV_CACHE_MODEL_DATA_DEFAULT; - } else { - if ((mvtvm_mldev->cache_model_data < 0) || (mvtvm_mldev->cache_model_data > 1)) { - plt_err("Invalid argument, %s = %d", MVTVM_ML_DEV_CACHE_MODEL_DATA, - mvtvm_mldev->cache_model_data); - ret = -EINVAL; - goto exit; - } - } plt_ml_dbg("ML: %s = %d", MVTVM_ML_DEV_CACHE_MODEL_DATA, mvtvm_mldev->cache_model_data); exit:
diff --git a/drivers/ml/cnxk/mvtvm_ml_dev.h b/drivers/ml/cnxk/mvtvm_ml_dev.h
index 05e30f094c..f8b34ecd3a 100644
--- a/drivers/ml/cnxk/mvtvm_ml_dev.h
+++ b/drivers/ml/cnxk/mvtvm_ml_dev.h@@ -31,7 +31,7 @@ struct mvtvm_ml_dev { uint16_t max_nb_qpairs; /* Enable / disable model data caching */ - int cache_model_data; + bool cache_model_data; }; #endif /* _MVTVM_ML_DEV_H_ */
--
2.53.0