parse_integer_arg() uses atoi(), which cannot report an error, so a
malformed value such as "abc" becomes zero and the negative check never
fires.

enable_dpe_warnings, report_dpe_warnings, cache_model_data and
hw_queue_lock are booleans, so make the fields bool and use
rte_kvargs_handle_bool(). The "< 0 || > 1" checks which followed each
of them are then dead and go away; the *_set flags stay, since they
still distinguish an unset argument from one set to false. A bare key
now enables the option, and the usual spellings are accepted.

Signed-off-by: Stephen Hemminger <[email protected]>
---
 drivers/ml/cnxk/cn10k_ml_dev.c | 70 ++++++----------------------------
 drivers/ml/cnxk/cn10k_ml_dev.h |  8 ++--
 drivers/ml/cnxk/cn10k_ml_ops.c |  2 +-
 3 files changed, 16 insertions(+), 64 deletions(-)

diff --git a/drivers/ml/cnxk/cn10k_ml_dev.c b/drivers/ml/cnxk/cn10k_ml_dev.c
index c35895dc14..60bfb41b0f 100644
--- a/drivers/ml/cnxk/cn10k_ml_dev.c
+++ b/drivers/ml/cnxk/cn10k_ml_dev.c
@@ -80,20 +80,6 @@ parse_string_arg(const char *key __rte_unused, const char 
*value, void *extra_ar
        return 0;
 }
 
-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
 cn10k_mldev_parse_devargs(struct rte_devargs *devargs, struct cn10k_ml_dev 
*cn10k_mldev)
 {
@@ -131,8 +117,8 @@ cn10k_mldev_parse_devargs(struct rte_devargs *devargs, 
struct cn10k_ml_dev *cn10
        }
 
        if (rte_kvargs_count(kvlist, CN10K_ML_FW_ENABLE_DPE_WARNINGS) == 1) {
-               ret = rte_kvargs_process(kvlist, 
CN10K_ML_FW_ENABLE_DPE_WARNINGS,
-                                        &parse_integer_arg, 
&cn10k_mldev->fw.enable_dpe_warnings);
+               ret = rte_kvargs_process_opt(kvlist, 
CN10K_ML_FW_ENABLE_DPE_WARNINGS,
+                                        rte_kvargs_handle_bool, 
&cn10k_mldev->fw.enable_dpe_warnings);
                if (ret < 0) {
                        plt_err("Error processing arguments, key = %s",
                                CN10K_ML_FW_ENABLE_DPE_WARNINGS);
@@ -143,8 +129,8 @@ cn10k_mldev_parse_devargs(struct rte_devargs *devargs, 
struct cn10k_ml_dev *cn10
        }
 
        if (rte_kvargs_count(kvlist, CN10K_ML_FW_REPORT_DPE_WARNINGS) == 1) {
-               ret = rte_kvargs_process(kvlist, 
CN10K_ML_FW_REPORT_DPE_WARNINGS,
-                                        &parse_integer_arg, 
&cn10k_mldev->fw.report_dpe_warnings);
+               ret = rte_kvargs_process_opt(kvlist, 
CN10K_ML_FW_REPORT_DPE_WARNINGS,
+                                        rte_kvargs_handle_bool, 
&cn10k_mldev->fw.report_dpe_warnings);
                if (ret < 0) {
                        plt_err("Error processing arguments, key = %s",
                                CN10K_ML_FW_REPORT_DPE_WARNINGS);
@@ -155,7 +141,7 @@ cn10k_mldev_parse_devargs(struct rte_devargs *devargs, 
struct cn10k_ml_dev *cn10
        }
 
        if (rte_kvargs_count(kvlist, CN10K_ML_DEV_CACHE_MODEL_DATA) == 1) {
-               ret = rte_kvargs_process(kvlist, CN10K_ML_DEV_CACHE_MODEL_DATA, 
&parse_integer_arg,
+               ret = rte_kvargs_process_opt(kvlist, 
CN10K_ML_DEV_CACHE_MODEL_DATA, rte_kvargs_handle_bool,
                                         &cn10k_mldev->cache_model_data);
                if (ret < 0) {
                        plt_err("Error processing arguments, key = %s",
@@ -178,7 +164,7 @@ cn10k_mldev_parse_devargs(struct rte_devargs *devargs, 
struct cn10k_ml_dev *cn10
        }
 
        if (rte_kvargs_count(kvlist, CN10K_ML_DEV_HW_QUEUE_LOCK) == 1) {
-               ret = rte_kvargs_process(kvlist, CN10K_ML_DEV_HW_QUEUE_LOCK, 
&parse_integer_arg,
+               ret = rte_kvargs_process_opt(kvlist, 
CN10K_ML_DEV_HW_QUEUE_LOCK, rte_kvargs_handle_bool,
                                         &cn10k_mldev->hw_queue_lock);
                if (ret < 0) {
                        plt_err("Error processing arguments, key = %s",
@@ -190,7 +176,7 @@ cn10k_mldev_parse_devargs(struct rte_devargs *devargs, 
struct cn10k_ml_dev *cn10
        }
 
        if (rte_kvargs_count(kvlist, CN10K_ML_OCM_PAGE_SIZE) == 1) {
-               ret = rte_kvargs_process(kvlist, CN10K_ML_OCM_PAGE_SIZE, 
&parse_integer_arg,
+               ret = rte_kvargs_process(kvlist, CN10K_ML_OCM_PAGE_SIZE, 
rte_kvargs_handle_int,
                                         &cn10k_mldev->ocm_page_size);
                if (ret < 0) {
                        plt_err("Error processing arguments, key = %s", 
CN10K_ML_OCM_PAGE_SIZE);
@@ -207,44 +193,18 @@ cn10k_mldev_parse_devargs(struct rte_devargs *devargs, 
struct cn10k_ml_dev *cn10
                cn10k_mldev->fw.path = fw_path;
        plt_info("ML: %s = %s", CN10K_ML_FW_PATH, cn10k_mldev->fw.path);
 
-       if (!enable_dpe_warnings_set) {
+       if (!enable_dpe_warnings_set)
                cn10k_mldev->fw.enable_dpe_warnings = 
CN10K_ML_FW_ENABLE_DPE_WARNINGS_DEFAULT;
-       } else {
-               if ((cn10k_mldev->fw.enable_dpe_warnings < 0) ||
-                   (cn10k_mldev->fw.enable_dpe_warnings > 1)) {
-                       plt_err("Invalid argument, %s = %d", 
CN10K_ML_FW_ENABLE_DPE_WARNINGS,
-                               cn10k_mldev->fw.enable_dpe_warnings);
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       }
        plt_info("ML: %s = %d", CN10K_ML_FW_ENABLE_DPE_WARNINGS,
                 cn10k_mldev->fw.enable_dpe_warnings);
 
-       if (!report_dpe_warnings_set) {
+       if (!report_dpe_warnings_set)
                cn10k_mldev->fw.report_dpe_warnings = 
CN10K_ML_FW_REPORT_DPE_WARNINGS_DEFAULT;
-       } else {
-               if ((cn10k_mldev->fw.report_dpe_warnings < 0) ||
-                   (cn10k_mldev->fw.report_dpe_warnings > 1)) {
-                       plt_err("Invalid argument, %s = %d", 
CN10K_ML_FW_REPORT_DPE_WARNINGS,
-                               cn10k_mldev->fw.report_dpe_warnings);
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       }
        plt_info("ML: %s = %d", CN10K_ML_FW_REPORT_DPE_WARNINGS,
                 cn10k_mldev->fw.report_dpe_warnings);
 
-       if (!cache_model_data_set) {
+       if (!cache_model_data_set)
                cn10k_mldev->cache_model_data = 
CN10K_ML_DEV_CACHE_MODEL_DATA_DEFAULT;
-       } else {
-               if ((cn10k_mldev->cache_model_data < 0) || 
(cn10k_mldev->cache_model_data > 1)) {
-                       plt_err("Invalid argument, %s = %d", 
CN10K_ML_DEV_CACHE_MODEL_DATA,
-                               cn10k_mldev->cache_model_data);
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       }
        plt_info("ML: %s = %d", CN10K_ML_DEV_CACHE_MODEL_DATA, 
cn10k_mldev->cache_model_data);
 
        if (!ocm_alloc_mode_set) {
@@ -261,16 +221,8 @@ cn10k_mldev_parse_devargs(struct rte_devargs *devargs, 
struct cn10k_ml_dev *cn10
        }
        plt_info("ML: %s = %s", CN10K_ML_OCM_ALLOC_MODE, 
cn10k_mldev->ocm.alloc_mode);
 
-       if (!hw_queue_lock_set) {
+       if (!hw_queue_lock_set)
                cn10k_mldev->hw_queue_lock = CN10K_ML_DEV_HW_QUEUE_LOCK_DEFAULT;
-       } else {
-               if ((cn10k_mldev->hw_queue_lock < 0) || 
(cn10k_mldev->hw_queue_lock > 1)) {
-                       plt_err("Invalid argument, %s = %d", 
CN10K_ML_DEV_HW_QUEUE_LOCK,
-                               cn10k_mldev->hw_queue_lock);
-                       ret = -EINVAL;
-                       goto exit;
-               }
-       }
        plt_info("ML: %s = %d", CN10K_ML_DEV_HW_QUEUE_LOCK, 
cn10k_mldev->hw_queue_lock);
 
        if (!ocm_page_size_set) {
diff --git a/drivers/ml/cnxk/cn10k_ml_dev.h b/drivers/ml/cnxk/cn10k_ml_dev.h
index dadb3b571b..4ca8dc63f4 100644
--- a/drivers/ml/cnxk/cn10k_ml_dev.h
+++ b/drivers/ml/cnxk/cn10k_ml_dev.h
@@ -108,10 +108,10 @@ struct cn10k_ml_fw {
        const char *path;
 
        /* Enable DPE warnings */
-       int enable_dpe_warnings;
+       bool enable_dpe_warnings;
 
        /* Report DPE warnings */
-       int report_dpe_warnings;
+       bool report_dpe_warnings;
 
        /* Data buffer */
        uint8_t *data;
@@ -132,10 +132,10 @@ struct cn10k_ml_dev {
        struct cn10k_ml_ocm ocm;
 
        /* Enable / disable model data caching */
-       int cache_model_data;
+       bool cache_model_data;
 
        /* Use spinlock version of ROC enqueue */
-       int hw_queue_lock;
+       bool hw_queue_lock;
 
        /* OCM page size */
        int ocm_page_size;
diff --git a/drivers/ml/cnxk/cn10k_ml_ops.c b/drivers/ml/cnxk/cn10k_ml_ops.c
index 597806b787..732f9b62ae 100644
--- a/drivers/ml/cnxk/cn10k_ml_ops.c
+++ b/drivers/ml/cnxk/cn10k_ml_ops.c
@@ -377,7 +377,7 @@ cn10k_ml_dev_configure(struct cnxk_ml_dev *cnxk_mldev, 
const struct rte_ml_dev_c
        rte_spinlock_init(&ocm->lock);
 
        /* Set JCMDQ enqueue function */
-       if (cn10k_mldev->hw_queue_lock == 1)
+       if (cn10k_mldev->hw_queue_lock)
                cn10k_mldev->ml_jcmdq_enqueue = roc_ml_jcmdq_enqueue_sl;
        else
                cn10k_mldev->ml_jcmdq_enqueue = roc_ml_jcmdq_enqueue_lf;
-- 
2.53.0

Reply via email to