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 <[email protected]>
---
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