Five of the six handlers here applied a range and stored the result, and returned -EINVAL without logging, so a value out of range was rejected with nothing to say what the range was.
Use rte_kvargs_handle_urange() for those five. parse_reta_size() keeps its handler since it rounds the value up to a supported table size rather than rejecting it. Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/net/cnxk/cnxk_ethdev_devargs.c | 112 +++++-------------------- 1 file changed, 21 insertions(+), 91 deletions(-) diff --git a/drivers/net/cnxk/cnxk_ethdev_devargs.c b/drivers/net/cnxk/cnxk_ethdev_devargs.c index 887349fe24..18472d54b8 100644 --- a/drivers/net/cnxk/cnxk_ethdev_devargs.c +++ b/drivers/net/cnxk/cnxk_ethdev_devargs.c @@ -21,67 +21,6 @@ struct flow_pre_l2_size_info { uint8_t pre_l2_size_shift_dir; }; -static int -parse_outb_nb_crypto_qs(const char *key, const char *value, void *extra_args) -{ - uint64_t val; - - RTE_SET_USED(key); - - if (rte_kvargs_to_uint(value, 1, 64, &val) < 0) - return -EINVAL; - - *(uint16_t *)extra_args = val; - - return 0; -} - -static int -parse_rxc_step(const char *key, const char *value, void *extra_args) -{ - uint64_t val; - - RTE_SET_USED(key); - - if (rte_kvargs_to_uint(value, 0, ROC_NIX_INL_REAS_STEP_MAX, &val) < 0) - return -EINVAL; - - *(uint32_t *)extra_args = val; - - return 0; -} - -static int -parse_flow_max_priority(const char *key, const char *value, void *extra_args) -{ - uint64_t val; - - RTE_SET_USED(key); - - if (rte_kvargs_to_uint(value, 1, ROC_NPC_MAX_MCAM_PRIORITY, &val) < 0) - return -EINVAL; - - *(uint16_t *)extra_args = val; - - return 0; -} - -static int -parse_flow_prealloc_size(const char *key, const char *value, void *extra_args) -{ - uint64_t val; - - RTE_SET_USED(key); - - /* Limit the prealloc size to 32 */ - if (rte_kvargs_to_uint(value, 1, 32, &val) < 0) - return -EINVAL; - - *(uint16_t *)extra_args = val; - - return 0; -} - static int parse_reta_size(const char *key, const char *value, void *extra_args) { @@ -158,21 +97,6 @@ parse_switch_header_type(const char *key, const char *value, void *extra_args) return 0; } -static int -parse_skip_size_info(const char *key, const char *value, void *extra_args) -{ - uint64_t val; - - RTE_SET_USED(key); - - if (rte_kvargs_to_uint(value, 0, 255, &val) < 0) - return -EINVAL; - - *(uint16_t *)extra_args = val; - - return 0; -} - static int parse_sdp_channel_mask(const char *key, const char *value, void *extra_args) { @@ -234,11 +158,15 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) uint16_t sqb_slack = ROC_NIX_SQB_SLACK; uint32_t ipsec_out_max_sa = BIT(12); bool custom_meta_aura_dis = false; - uint16_t flow_prealloc_size = 1; + struct rte_kvargs_urange flow_prealloc_size = { + .min = 1, .max = 32, .val = 1 }; uint16_t switch_header_type = 0; - uint16_t skip_size_info = 0; - uint16_t flow_max_priority = 3; - uint16_t outb_nb_crypto_qs = 1; + struct rte_kvargs_urange skip_size_info = { + .min = 0, .max = 255, .val = 0 }; + struct rte_kvargs_urange flow_max_priority = { + .min = 1, .max = ROC_NPC_MAX_MCAM_PRIORITY, .val = 3 }; + struct rte_kvargs_urange outb_nb_crypto_qs = { + .min = 1, .max = 64, .val = 1 }; uint32_t ipsec_in_min_spi = 0; uint16_t outb_nb_desc = 8200; struct sdp_channel sdp_chan; @@ -254,7 +182,8 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) bool lock_rx_ctx = false; bool rx_inj_ena = false; bool no_inl_dev = false; - uint32_t rxc_step = 0; + struct rte_kvargs_urange rxc_step = { + .min = 0, .max = ROC_NIX_INL_REAS_STEP_MAX, .val = 0 }; int ret; memset(&sdp_chan, 0, sizeof(sdp_chan)); @@ -277,9 +206,9 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) ret |= rte_kvargs_process(kvlist, CNXK_MAX_SQB_COUNT, rte_kvargs_handle_u16, &sqb_count); ret |= rte_kvargs_process(kvlist, CNXK_FLOW_PREALLOC_SIZE, - &parse_flow_prealloc_size, &flow_prealloc_size); + rte_kvargs_handle_urange, &flow_prealloc_size); ret |= rte_kvargs_process(kvlist, CNXK_FLOW_MAX_PRIORITY, - &parse_flow_max_priority, &flow_max_priority); + rte_kvargs_handle_urange, &flow_max_priority); ret |= rte_kvargs_process(kvlist, CNXK_SWITCH_HEADER_TYPE, &parse_switch_header_type, &switch_header_type); ret |= rte_kvargs_process_opt(kvlist, CNXK_RSS_TAG_AS_XOR, rte_kvargs_handle_bool, @@ -295,7 +224,7 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) ret |= rte_kvargs_process(kvlist, CNXK_OUTB_NB_DESC, rte_kvargs_handle_u16, &outb_nb_desc); ret |= rte_kvargs_process(kvlist, CNXK_OUTB_NB_CRYPTO_QS, - &parse_outb_nb_crypto_qs, &outb_nb_crypto_qs); + rte_kvargs_handle_urange, &outb_nb_crypto_qs); ret |= rte_kvargs_process_opt(kvlist, CNXK_NO_INL_DEV, rte_kvargs_handle_bool, &no_inl_dev); ret |= rte_kvargs_process(kvlist, CNXK_SDP_CHANNEL_MASK, @@ -320,8 +249,9 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) &force_tail_drop); ret |= rte_kvargs_process_opt(kvlist, CNXK_DIS_XQE_DROP, rte_kvargs_handle_bool, &dis_xqe_drop); - ret |= rte_kvargs_process(kvlist, CNXK_RXC_STEP, &parse_rxc_step, &rxc_step); - ret |= rte_kvargs_process(kvlist, CNXK_SKIP_SIZE_INFO, &parse_skip_size_info, + ret |= rte_kvargs_process(kvlist, CNXK_RXC_STEP, rte_kvargs_handle_urange, + &rxc_step); + ret |= rte_kvargs_process(kvlist, CNXK_SKIP_SIZE_INFO, rte_kvargs_handle_urange, &skip_size_info); rte_kvargs_free(kvlist); @@ -337,7 +267,7 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) dev->inb.custom_meta_aura_dis = custom_meta_aura_dis; dev->outb.max_sa = ipsec_out_max_sa; dev->outb.nb_desc = outb_nb_desc; - dev->outb.nb_crypto_qs = outb_nb_crypto_qs; + dev->outb.nb_crypto_qs = outb_nb_crypto_qs.val; dev->nix.ipsec_out_max_sa = ipsec_out_max_sa; dev->nix.rss_tag_as_xor = rss_tag_as_xor; dev->nix.max_sqb_count = sqb_count; @@ -350,15 +280,15 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) if (roc_feature_nix_has_own_meta_aura()) dev->nix.meta_buf_sz = meta_buf_sz; - dev->npc.flow_prealloc_size = flow_prealloc_size; + dev->npc.flow_prealloc_size = flow_prealloc_size.val; if (roc_model_is_cn20k()) dev->npc.flow_max_priority = ROC_NPC_MAX_MCAM_PRIORITY; else - dev->npc.flow_max_priority = flow_max_priority; + dev->npc.flow_max_priority = flow_max_priority.val; dev->npc.switch_header_type = switch_header_type; - dev->npc.skip_size = skip_size_info; + dev->npc.skip_size = skip_size_info.val; dev->npc.sdp_channel = sdp_chan.channel; dev->npc.sdp_channel_mask = sdp_chan.mask; dev->npc.is_sdp_mask_set = sdp_chan.is_sdp_mask_set; @@ -370,7 +300,7 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev) dev->nix.rx_inj_ena = rx_inj_ena; dev->nix.force_tail_drop = force_tail_drop; dev->nix.dis_xqe_drop = dis_xqe_drop; - dev->nix.rxc_step = rxc_step; + dev->nix.rxc_step = rxc_step.val; return 0; exit: return -EINVAL; -- 2.53.0

