All fourteen handlers repeat the same open coded conversion, testing
errno for ERANGE without ever clearing it first. A stale ERANGE left by
earlier code therefore rejects a valid value, and the test only fires at
all when the result happens to be ULONG_MAX.

The per-argument range checks are left as they are, since they carry the
documented limits for each devarg.

Signed-off-by: Stephen Hemminger <[email protected]>
---
 drivers/net/bnxt/bnxt_ethdev.c | 106 ++++++++++-----------------------
 1 file changed, 32 insertions(+), 74 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c
index 4d4349457c..2942482579 100644
--- a/drivers/net/bnxt/bnxt_ethdev.c
+++ b/drivers/net/bnxt/bnxt_ethdev.c
@@ -5872,8 +5872,7 @@ bnxt_parse_devarg_flow_xstat(__rte_unused const char *key,
                             const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long flow_xstat;
-       char *end = NULL;
+       uint64_t flow_xstat;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -5881,9 +5880,7 @@ bnxt_parse_devarg_flow_xstat(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       flow_xstat = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (flow_xstat == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &flow_xstat) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to flow_xstat devarg.");
                return -EINVAL;
@@ -5907,8 +5904,7 @@ bnxt_parse_devarg_max_num_kflows(__rte_unused const char 
*key,
                                        const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long max_num_kflows;
-       char *end = NULL;
+       uint64_t max_num_kflows;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -5916,9 +5912,7 @@ bnxt_parse_devarg_max_num_kflows(__rte_unused const char 
*key,
                return -EINVAL;
        }
 
-       max_num_kflows = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-               (max_num_kflows == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &max_num_kflows) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                        "Invalid parameter passed to max_num_kflows devarg.");
                return -EINVAL;
@@ -5932,8 +5926,8 @@ bnxt_parse_devarg_max_num_kflows(__rte_unused const char 
*key,
 
        bp->max_num_kflows = max_num_kflows;
        if (bp->max_num_kflows)
-               PMD_DRV_LOG_LINE(INFO, "max_num_kflows set as %ldK.",
-                               max_num_kflows);
+               PMD_DRV_LOG_LINE(INFO, "max_num_kflows set as %uK.",
+                               (unsigned int)max_num_kflows);
 
        return 0;
 }
@@ -5943,8 +5937,7 @@ bnxt_parse_devarg_cqe_mode(__rte_unused const char *key,
                           const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long cqe_mode;
-       char *end = NULL;
+       uint64_t cqe_mode;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -5953,9 +5946,7 @@ bnxt_parse_devarg_cqe_mode(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       cqe_mode = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (cqe_mode == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &cqe_mode) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to cqe-mode "
                            "devargs.");
@@ -5980,8 +5971,7 @@ bnxt_parse_devarg_app_instance_id(__rte_unused const char 
*key,
                                  const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long app_instance_id;
-       char *end = NULL;
+       uint64_t app_instance_id;
 
        if (!opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -5989,9 +5979,7 @@ bnxt_parse_devarg_app_instance_id(__rte_unused const char 
*key,
                return -EINVAL;
        }
 
-       app_instance_id = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (app_instance_id == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &app_instance_id) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                                 "Invalid parameter passed to instance 
devargs");
                return -EINVAL;
@@ -6014,8 +6002,7 @@ bnxt_parse_devarg_app_id(__rte_unused const char *key,
                                 const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long app_id;
-       char *end = NULL;
+       uint64_t app_id;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6024,9 +6011,7 @@ bnxt_parse_devarg_app_id(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       app_id = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (app_id == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &app_id) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to app_id "
                            "devargs.");
@@ -6050,8 +6035,7 @@ bnxt_parse_devarg_ieee_1588(__rte_unused const char *key,
                            const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long ieee_1588;
-       char *end = NULL;
+       uint64_t ieee_1588;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6060,9 +6044,7 @@ bnxt_parse_devarg_ieee_1588(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       ieee_1588 = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (ieee_1588 == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &ieee_1588) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to ieee_1588 "
                            "devargs.");
@@ -6094,8 +6076,7 @@ bnxt_parse_devarg_rep_is_pf(__rte_unused const char *key,
                            const char *value, void *opaque_arg)
 {
        struct bnxt_representor *vfr_bp = opaque_arg;
-       unsigned long rep_is_pf;
-       char *end = NULL;
+       uint64_t rep_is_pf;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6103,9 +6084,7 @@ bnxt_parse_devarg_rep_is_pf(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       rep_is_pf = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep_is_pf == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep_is_pf) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to rep_is_pf devargs.");
                return -EINVAL;
@@ -6131,8 +6110,7 @@ bnxt_parse_devarg_rep_based_pf(__rte_unused const char 
*key,
                               const char *value, void *opaque_arg)
 {
        struct bnxt_representor *vfr_bp = opaque_arg;
-       unsigned long rep_based_pf;
-       char *end = NULL;
+       uint64_t rep_based_pf;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6141,9 +6119,7 @@ bnxt_parse_devarg_rep_based_pf(__rte_unused const char 
*key,
                return -EINVAL;
        }
 
-       rep_based_pf = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep_based_pf == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep_based_pf) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to rep_based_pf "
                            "devargs.");
@@ -6169,8 +6145,7 @@ bnxt_parse_devarg_rep_q_r2f(__rte_unused const char *key,
                            const char *value, void *opaque_arg)
 {
        struct bnxt_representor *vfr_bp = opaque_arg;
-       unsigned long rep_q_r2f;
-       char *end = NULL;
+       uint64_t rep_q_r2f;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6179,9 +6154,7 @@ bnxt_parse_devarg_rep_q_r2f(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       rep_q_r2f = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep_q_r2f == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep_q_r2f) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to rep_q_r2f "
                            "devargs.");
@@ -6206,8 +6179,7 @@ bnxt_parse_devarg_rep_q_f2r(__rte_unused const char *key,
                            const char *value, void *opaque_arg)
 {
        struct bnxt_representor *vfr_bp = opaque_arg;
-       unsigned long rep_q_f2r;
-       char *end = NULL;
+       uint64_t rep_q_f2r;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6216,9 +6188,7 @@ bnxt_parse_devarg_rep_q_f2r(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       rep_q_f2r = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep_q_f2r == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep_q_f2r) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to rep_q_f2r "
                            "devargs.");
@@ -6243,8 +6213,7 @@ bnxt_parse_devarg_rep_fc_r2f(__rte_unused const char *key,
                             const char *value, void *opaque_arg)
 {
        struct bnxt_representor *vfr_bp = opaque_arg;
-       unsigned long rep_fc_r2f;
-       char *end = NULL;
+       uint64_t rep_fc_r2f;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6253,9 +6222,7 @@ bnxt_parse_devarg_rep_fc_r2f(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       rep_fc_r2f = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep_fc_r2f == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep_fc_r2f) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to rep_fc_r2f "
                            "devargs.");
@@ -6270,7 +6237,7 @@ bnxt_parse_devarg_rep_fc_r2f(__rte_unused const char *key,
 
        vfr_bp->flags |= BNXT_REP_FC_R2F_VALID;
        vfr_bp->rep_fc_r2f = rep_fc_r2f;
-       PMD_DRV_LOG_LINE(INFO, "rep-fc-r2f = %lu", rep_fc_r2f);
+       PMD_DRV_LOG_LINE(INFO, "rep-fc-r2f = %u", (unsigned int)rep_fc_r2f);
 
        return 0;
 }
@@ -6280,8 +6247,7 @@ bnxt_parse_devarg_rep_fc_f2r(__rte_unused const char *key,
                             const char *value, void *opaque_arg)
 {
        struct bnxt_representor *vfr_bp = opaque_arg;
-       unsigned long rep_fc_f2r;
-       char *end = NULL;
+       uint64_t rep_fc_f2r;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6290,9 +6256,7 @@ bnxt_parse_devarg_rep_fc_f2r(__rte_unused const char *key,
                return -EINVAL;
        }
 
-       rep_fc_f2r = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep_fc_f2r == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep_fc_f2r) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                            "Invalid parameter passed to rep_fc_f2r "
                            "devargs.");
@@ -6307,7 +6271,7 @@ bnxt_parse_devarg_rep_fc_f2r(__rte_unused const char *key,
 
        vfr_bp->flags |= BNXT_REP_FC_F2R_VALID;
        vfr_bp->rep_fc_f2r = rep_fc_f2r;
-       PMD_DRV_LOG_LINE(INFO, "rep-fc-f2r = %lu", rep_fc_f2r);
+       PMD_DRV_LOG_LINE(INFO, "rep-fc-f2r = %u", (unsigned int)rep_fc_f2r);
 
        return 0;
 }
@@ -6317,8 +6281,7 @@ bnxt_parse_devarg_representor_mode(__rte_unused const 
char *key,
                                   const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long rep;
-       char *end = NULL;
+       uint64_t rep;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6326,9 +6289,7 @@ bnxt_parse_devarg_representor_mode(__rte_unused const 
char *key,
                return -EINVAL;
        }
 
-       rep = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                                 "Invalid param passed to rep mode in devargs");
                return -EINVAL;
@@ -6346,8 +6307,7 @@ bnxt_parse_devarg_scalar_mode(__rte_unused const char 
*key,
                              const char *value, void *opaque_arg)
 {
        struct bnxt *bp = opaque_arg;
-       unsigned long rep;
-       char *end = NULL;
+       uint64_t rep;
 
        if (!value || !opaque_arg) {
                PMD_DRV_LOG_LINE(ERR,
@@ -6355,9 +6315,7 @@ bnxt_parse_devarg_scalar_mode(__rte_unused const char 
*key,
                return -EINVAL;
        }
 
-       rep = strtoul(value, &end, 10);
-       if (end == NULL || *end != '\0' ||
-           (rep == ULONG_MAX && errno == ERANGE)) {
+       if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &rep) < 0) {
                PMD_DRV_LOG_LINE(ERR,
                                 "Invalid param passed to scalar mode in 
devargs");
                return -EINVAL;
-- 
2.53.0

Reply via email to