[PATCH v3 64/65] net/cnxk: use kvargs range handlers
Stephen Hemminger
stephen at networkplumber.org
Thu Oct 1 00:41:22 CEST 2026
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 <stephen at networkplumber.org>
---
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
More information about the dev
mailing list