From: Stephen Hemminger <stephen@networkplumber.org>
To: dev@dpdk.org
Cc: Stephen Hemminger <stephen@networkplumber.org>,
Nithin Dabilpuram <ndabilpuram@marvell.com>,
Kiran Kumar K <kirankumark@marvell.com>,
Sunil Kumar Kori <skori@marvell.com>,
Satha Rao <skoteshwar@marvell.com>,
Harman Kalra <hkalra@marvell.com>
Subject: [PATCH v3 37/65] net/cnxk: use kvargs numeric helpers
Date: Wed, 30 Sep 2026 15:40:55 -0700 [thread overview]
Message-ID: <20260930224340.58580-38-stephen@networkplumber.org> (raw)
In-Reply-To: <20260930224340.58580-1-stephen@networkplumber.org>
Most handlers in this file used atoi(), which cannot report an error, so
a malformed value was silently taken as zero. Several of them also
assigned a uint32_t into a uint16_t without a range check, so a value
such as "65536" wrapped to zero.
parse_ipsec_in_spi_range(), parse_ipsec_out_max_sa() and
parse_meta_bufsize() went further and deliberately swallowed the error,
setting the value to zero and returning success.
Seven of the handlers were left doing nothing beyond a plain range
checked store, so drop them and pass rte_kvargs_handle_u16() or
rte_kvargs_handle_u32() to rte_kvargs_process() directly. The rest keep
a local handler because they have a narrower range or non-numeric
syntax.
Since the handlers can now fail, propagate the rte_kvargs_process()
return value instead of discarding it, so that a bad argument fails
probe rather than being ignored.
The pre_l2 header and SDP channel mask parsers are left alone: each
packs several fields into one value separated by punctuation, as in
flow_pre_l2_info=0x2/0x7e/0x1, which no single arg_handler_t can parse.
The eleven boolean arguments become bool and use
rte_kvargs_handle_bool(): scalar_enable, tx_compl_ena, tag_as_xor,
lock_rx_ctx, no_inl_dev, custom_sa_act, rx_inj_ena,
custom_meta_aura_dis, custom_inb_sa, force_tail_drop and
disable_xqe_drop. Most of the fields behind them are already bool, so
the "!!" coercions on the way in are no longer needed. A bare key now
enables the option, and the usual spellings are accepted.
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
---
drivers/net/cnxk/cnxk_ethdev_devargs.c | 283 +++++++++----------------
1 file changed, 97 insertions(+), 186 deletions(-)
diff --git a/drivers/net/cnxk/cnxk_ethdev_devargs.c b/drivers/net/cnxk/cnxk_ethdev_devargs.c
index ea18090919..887349fe24 100644
--- a/drivers/net/cnxk/cnxk_ethdev_devargs.c
+++ b/drivers/net/cnxk/cnxk_ethdev_devargs.c
@@ -5,6 +5,8 @@
#include <inttypes.h>
#include <math.h>
+#include <rte_kvargs.h>
+
#include "cnxk_ethdev.h"
struct sdp_channel {
@@ -19,28 +21,14 @@ struct flow_pre_l2_size_info {
uint8_t pre_l2_size_shift_dir;
};
-static int
-parse_outb_nb_desc(const char *key, const char *value, void *extra_args)
-{
- RTE_SET_USED(key);
- uint32_t val;
-
- val = atoi(value);
-
- *(uint16_t *)extra_args = val;
-
- return 0;
-}
-
static int
parse_outb_nb_crypto_qs(const char *key, const char *value, void *extra_args)
{
- RTE_SET_USED(key);
- uint32_t val;
+ uint64_t val;
- val = atoi(value);
+ RTE_SET_USED(key);
- if (val < 1 || val > 64)
+ if (rte_kvargs_to_uint(value, 1, 64, &val) < 0)
return -EINVAL;
*(uint16_t *)extra_args = val;
@@ -48,51 +36,15 @@ parse_outb_nb_crypto_qs(const char *key, const char *value, void *extra_args)
return 0;
}
-static int
-parse_ipsec_in_spi_range(const char *key, const char *value, void *extra_args)
-{
- RTE_SET_USED(key);
- uint32_t val;
-
- errno = 0;
- val = strtoul(value, NULL, 0);
- if (errno)
- val = 0;
-
- *(uint32_t *)extra_args = val;
-
- return 0;
-}
-
static int
parse_rxc_step(const char *key, const char *value, void *extra_args)
{
- RTE_SET_USED(key);
- uint32_t val;
+ uint64_t val;
- errno = 0;
- val = strtoul(value, NULL, 0);
- if (errno)
- return -EINVAL;
-
- if (val > ROC_NIX_INL_REAS_STEP_MAX)
- return -EINVAL;
-
- *(uint32_t *)extra_args = val;
-
- return 0;
-}
-
-static int
-parse_ipsec_out_max_sa(const char *key, const char *value, void *extra_args)
-{
RTE_SET_USED(key);
- uint32_t val;
- errno = 0;
- val = strtoul(value, NULL, 0);
- if (errno)
- val = 0;
+ if (rte_kvargs_to_uint(value, 0, ROC_NIX_INL_REAS_STEP_MAX, &val) < 0)
+ return -EINVAL;
*(uint32_t *)extra_args = val;
@@ -102,12 +54,11 @@ parse_ipsec_out_max_sa(const char *key, const char *value, void *extra_args)
static int
parse_flow_max_priority(const char *key, const char *value, void *extra_args)
{
- RTE_SET_USED(key);
- uint16_t val;
+ uint64_t val;
- val = atoi(value);
+ RTE_SET_USED(key);
- if (val < 1 || val > ROC_NPC_MAX_MCAM_PRIORITY)
+ if (rte_kvargs_to_uint(value, 1, ROC_NPC_MAX_MCAM_PRIORITY, &val) < 0)
return -EINVAL;
*(uint16_t *)extra_args = val;
@@ -118,13 +69,12 @@ parse_flow_max_priority(const char *key, const char *value, void *extra_args)
static int
parse_flow_prealloc_size(const char *key, const char *value, void *extra_args)
{
- RTE_SET_USED(key);
- uint16_t val;
+ uint64_t val;
- val = atoi(value);
+ RTE_SET_USED(key);
/* Limit the prealloc size to 32 */
- if (val < 1 || val > 32)
+ if (rte_kvargs_to_uint(value, 1, 32, &val) < 0)
return -EINVAL;
*(uint16_t *)extra_args = val;
@@ -135,10 +85,12 @@ parse_flow_prealloc_size(const char *key, const char *value, void *extra_args)
static int
parse_reta_size(const char *key, const char *value, void *extra_args)
{
+ uint64_t val;
+
RTE_SET_USED(key);
- uint32_t val;
- val = atoi(value);
+ if (rte_kvargs_to_uint(value, 0, UINT32_MAX, &val) < 0)
+ return -EINVAL;
if (val <= RTE_ETH_RSS_RETA_SIZE_64)
val = ROC_NIX_RSS_RETA_SZ_64;
@@ -177,45 +129,6 @@ parse_pre_l2_hdr_info(const char *key, const char *value, void *extra_args)
return 0;
}
-static int
-parse_flag(const char *key, const char *value, void *extra_args)
-{
- RTE_SET_USED(key);
-
- *(uint16_t *)extra_args = atoi(value);
-
- return 0;
-}
-
-static int
-parse_sqb_count(const char *key, const char *value, void *extra_args)
-{
- RTE_SET_USED(key);
- uint32_t val;
-
- val = atoi(value);
-
- *(uint16_t *)extra_args = val;
-
- return 0;
-}
-
-static int
-parse_meta_bufsize(const char *key, const char *value, void *extra_args)
-{
- RTE_SET_USED(key);
- uint32_t val;
-
- errno = 0;
- val = strtoul(value, NULL, 0);
- if (errno)
- val = 0;
-
- *(uint32_t *)extra_args = val;
-
- return 0;
-}
-
static int
parse_switch_header_type(const char *key, const char *value, void *extra_args)
{
@@ -248,12 +161,11 @@ parse_switch_header_type(const char *key, const char *value, void *extra_args)
static int
parse_skip_size_info(const char *key, const char *value, void *extra_args)
{
+ uint64_t val;
+
RTE_SET_USED(key);
- uint32_t val;
- errno = 0;
- val = strtoul(value, NULL, 0);
- if (errno || val > 255)
+ if (rte_kvargs_to_uint(value, 0, 255, &val) < 0)
return -EINVAL;
*(uint16_t *)extra_args = val;
@@ -282,19 +194,6 @@ parse_sdp_channel_mask(const char *key, const char *value, void *extra_args)
return 0;
}
-static int
-parse_val_u16(const char *key, const char *value, void *extra_args)
-{
- RTE_SET_USED(key);
- uint16_t val;
-
- val = atoi(value);
-
- *(uint16_t *)extra_args = val;
-
- return 0;
-}
-
#define CNXK_RSS_RETA_SIZE "reta_size"
#define CNXK_SCL_ENABLE "scalar_enable"
#define CNXK_TX_COMPL_ENA "tx_compl_ena"
@@ -334,7 +233,7 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)
uint32_t ipsec_in_max_spi = BIT(8) - 1;
uint16_t sqb_slack = ROC_NIX_SQB_SLACK;
uint32_t ipsec_out_max_sa = BIT(12);
- uint16_t custom_meta_aura_dis = 0;
+ bool custom_meta_aura_dis = false;
uint16_t flow_prealloc_size = 1;
uint16_t switch_header_type = 0;
uint16_t skip_size_info = 0;
@@ -343,19 +242,20 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)
uint32_t ipsec_in_min_spi = 0;
uint16_t outb_nb_desc = 8200;
struct sdp_channel sdp_chan;
- uint16_t rss_tag_as_xor = 0;
- uint16_t force_tail_drop = 0;
- uint16_t scalar_enable = 0;
- uint16_t tx_compl_ena = 0;
- uint16_t custom_sa_act = 0;
- uint16_t custom_inb_sa = 0;
+ bool rss_tag_as_xor = false;
+ bool force_tail_drop = false;
+ bool scalar_enable = false;
+ bool tx_compl_ena = false;
+ bool custom_sa_act = false;
+ bool custom_inb_sa = false;
struct rte_kvargs *kvlist;
- uint16_t dis_xqe_drop = 0;
+ bool dis_xqe_drop = false;
uint32_t meta_buf_sz = 0;
- uint16_t lock_rx_ctx = 0;
- uint16_t rx_inj_ena = 0;
- uint16_t no_inl_dev = 0;
+ bool lock_rx_ctx = false;
+ bool rx_inj_ena = false;
+ bool no_inl_dev = false;
uint32_t rxc_step = 0;
+ int ret;
memset(&sdp_chan, 0, sizeof(sdp_chan));
memset(&pre_l2_info, 0, sizeof(struct flow_pre_l2_size_info));
@@ -367,60 +267,71 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)
if (kvlist == NULL)
goto exit;
- rte_kvargs_process(kvlist, CNXK_RSS_RETA_SIZE, &parse_reta_size,
- &reta_sz);
- rte_kvargs_process(kvlist, CNXK_SCL_ENABLE, &parse_flag,
- &scalar_enable);
- rte_kvargs_process(kvlist, CNXK_TX_COMPL_ENA, &parse_flag,
- &tx_compl_ena);
- rte_kvargs_process(kvlist, CNXK_MAX_SQB_COUNT, &parse_sqb_count,
- &sqb_count);
- rte_kvargs_process(kvlist, CNXK_FLOW_PREALLOC_SIZE,
- &parse_flow_prealloc_size, &flow_prealloc_size);
- rte_kvargs_process(kvlist, CNXK_FLOW_MAX_PRIORITY,
- &parse_flow_max_priority, &flow_max_priority);
- rte_kvargs_process(kvlist, CNXK_SWITCH_HEADER_TYPE,
- &parse_switch_header_type, &switch_header_type);
- rte_kvargs_process(kvlist, CNXK_RSS_TAG_AS_XOR, &parse_flag,
- &rss_tag_as_xor);
- rte_kvargs_process(kvlist, CNXK_LOCK_RX_CTX, &parse_flag, &lock_rx_ctx);
- rte_kvargs_process(kvlist, CNXK_IPSEC_IN_MIN_SPI,
- &parse_ipsec_in_spi_range, &ipsec_in_min_spi);
- rte_kvargs_process(kvlist, CNXK_IPSEC_IN_MAX_SPI,
- &parse_ipsec_in_spi_range, &ipsec_in_max_spi);
- rte_kvargs_process(kvlist, CNXK_IPSEC_OUT_MAX_SA,
- &parse_ipsec_out_max_sa, &ipsec_out_max_sa);
- rte_kvargs_process(kvlist, CNXK_OUTB_NB_DESC, &parse_outb_nb_desc,
- &outb_nb_desc);
- rte_kvargs_process(kvlist, CNXK_OUTB_NB_CRYPTO_QS,
- &parse_outb_nb_crypto_qs, &outb_nb_crypto_qs);
- rte_kvargs_process(kvlist, CNXK_NO_INL_DEV, &parse_flag, &no_inl_dev);
- rte_kvargs_process(kvlist, CNXK_SDP_CHANNEL_MASK,
- &parse_sdp_channel_mask, &sdp_chan);
- rte_kvargs_process(kvlist, CNXK_FLOW_PRE_L2_INFO,
- &parse_pre_l2_hdr_info, &pre_l2_info);
- rte_kvargs_process(kvlist, CNXK_CUSTOM_SA_ACT, &parse_flag,
- &custom_sa_act);
- rte_kvargs_process(kvlist, CNXK_SQB_SLACK, &parse_sqb_count,
- &sqb_slack);
- rte_kvargs_process(kvlist, CNXK_NIX_META_BUF_SZ, &parse_meta_bufsize, &meta_buf_sz);
- rte_kvargs_process(kvlist, CNXK_FLOW_AGING_POLL_FREQ, &parse_val_u16,
- &aging_thread_poll_freq);
- rte_kvargs_process(kvlist, CNXK_NIX_RX_INJ_ENABLE, &parse_flag, &rx_inj_ena);
- rte_kvargs_process(kvlist, CNXK_CUSTOM_META_AURA_DIS, &parse_flag,
- &custom_meta_aura_dis);
- rte_kvargs_process(kvlist, CNXK_CUSTOM_INB_SA, &parse_flag, &custom_inb_sa);
- rte_kvargs_process(kvlist, CNXK_FORCE_TAIL_DROP, &parse_flag, &force_tail_drop);
- rte_kvargs_process(kvlist, CNXK_DIS_XQE_DROP, &parse_flag, &dis_xqe_drop);
- rte_kvargs_process(kvlist, CNXK_RXC_STEP, &parse_rxc_step, &rxc_step);
- rte_kvargs_process(kvlist, CNXK_SKIP_SIZE_INFO, &parse_skip_size_info,
- &skip_size_info);
+ ret = 0;
+ ret |= rte_kvargs_process(kvlist, CNXK_RSS_RETA_SIZE, &parse_reta_size,
+ &reta_sz);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_SCL_ENABLE, rte_kvargs_handle_bool,
+ &scalar_enable);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_TX_COMPL_ENA, rte_kvargs_handle_bool,
+ &tx_compl_ena);
+ 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);
+ ret |= rte_kvargs_process(kvlist, CNXK_FLOW_MAX_PRIORITY,
+ &parse_flow_max_priority, &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,
+ &rss_tag_as_xor);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_LOCK_RX_CTX, rte_kvargs_handle_bool,
+ &lock_rx_ctx);
+ ret |= rte_kvargs_process(kvlist, CNXK_IPSEC_IN_MIN_SPI,
+ rte_kvargs_handle_u32, &ipsec_in_min_spi);
+ ret |= rte_kvargs_process(kvlist, CNXK_IPSEC_IN_MAX_SPI,
+ rte_kvargs_handle_u32, &ipsec_in_max_spi);
+ ret |= rte_kvargs_process(kvlist, CNXK_IPSEC_OUT_MAX_SA,
+ rte_kvargs_handle_u32, &ipsec_out_max_sa);
+ 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);
+ 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,
+ &parse_sdp_channel_mask, &sdp_chan);
+ ret |= rte_kvargs_process(kvlist, CNXK_FLOW_PRE_L2_INFO,
+ &parse_pre_l2_hdr_info, &pre_l2_info);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_CUSTOM_SA_ACT, rte_kvargs_handle_bool,
+ &custom_sa_act);
+ ret |= rte_kvargs_process(kvlist, CNXK_SQB_SLACK, rte_kvargs_handle_u16,
+ &sqb_slack);
+ ret |= rte_kvargs_process(kvlist, CNXK_NIX_META_BUF_SZ, rte_kvargs_handle_u32,
+ &meta_buf_sz);
+ ret |= rte_kvargs_process(kvlist, CNXK_FLOW_AGING_POLL_FREQ, rte_kvargs_handle_u16,
+ &aging_thread_poll_freq);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_NIX_RX_INJ_ENABLE, rte_kvargs_handle_bool,
+ &rx_inj_ena);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_CUSTOM_META_AURA_DIS, rte_kvargs_handle_bool,
+ &custom_meta_aura_dis);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_CUSTOM_INB_SA, rte_kvargs_handle_bool,
+ &custom_inb_sa);
+ ret |= rte_kvargs_process_opt(kvlist, CNXK_FORCE_TAIL_DROP, rte_kvargs_handle_bool,
+ &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,
+ &skip_size_info);
rte_kvargs_free(kvlist);
+ if (ret != 0)
+ goto exit;
+
null_devargs:
- dev->scalar_ena = !!scalar_enable;
- dev->tx_compl_ena = !!tx_compl_ena;
- dev->inb.no_inl_dev = !!no_inl_dev;
+ dev->scalar_ena = scalar_enable;
+ dev->tx_compl_ena = tx_compl_ena;
+ dev->inb.no_inl_dev = no_inl_dev;
dev->inb.min_spi = ipsec_in_min_spi;
dev->inb.max_spi = ipsec_in_max_spi;
dev->inb.custom_meta_aura_dis = custom_meta_aura_dis;
@@ -428,7 +339,7 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)
dev->outb.nb_desc = outb_nb_desc;
dev->outb.nb_crypto_qs = outb_nb_crypto_qs;
dev->nix.ipsec_out_max_sa = ipsec_out_max_sa;
- dev->nix.rss_tag_as_xor = !!rss_tag_as_xor;
+ dev->nix.rss_tag_as_xor = rss_tag_as_xor;
dev->nix.max_sqb_count = sqb_count;
dev->nix.reta_sz = reta_sz;
dev->nix.lock_rx_ctx = lock_rx_ctx;
@@ -458,7 +369,7 @@ cnxk_ethdev_parse_devargs(struct rte_devargs *devargs, struct cnxk_eth_dev *dev)
if (roc_feature_nix_has_rx_inject())
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.dis_xqe_drop = dis_xqe_drop;
dev->nix.rxc_step = rxc_step;
return 0;
exit:
--
2.53.0
next prev parent reply other threads:[~2026-09-30 22:47 UTC|newest]
Thread overview: 198+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-14 5:46 [PATCH 00/62] kvargs: add numeric conversion helpers and use them Stephen Hemminger
2026-09-14 5:46 ` [PATCH 01/62] net/txgbe: fix FDIR devarg integer width Stephen Hemminger
2026-09-14 5:46 ` [PATCH 02/62] kvargs: add numeric conversion helpers Stephen Hemminger
2026-09-14 5:46 ` [PATCH 03/62] kvargs: add a socket ID handler Stephen Hemminger
2026-09-14 5:46 ` [PATCH 04/62] kvargs: add hexadecimal conversion helpers Stephen Hemminger
2026-09-14 5:46 ` [PATCH 05/62] eal: validate memory size arguments Stephen Hemminger
2026-09-14 5:46 ` [PATCH 06/62] net/null: use kvargs numeric helpers Stephen Hemminger
2026-09-14 5:46 ` [PATCH 07/62] net/vhost: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 08/62] vdpa/ifc: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 09/62] net/softnic: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 10/62] dma/skeleton: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 11/62] raw/skeleton: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 12/62] baseband/null: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 13/62] net/memif: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 14/62] net/af_packet: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 15/62] net/pcap: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 16/62] net/ring: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 17/62] net/af_xdp: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 18/62] net/ark: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 19/62] net/failsafe: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 20/62] net/virtio: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 21/62] net/bonding: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 22/62] net/ena: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 23/62] net/netvsc: " Stephen Hemminger
2026-09-14 12:43 ` [EXTERNAL] " Wei Hu
2026-09-14 5:46 ` [PATCH 24/62] net/ice: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 25/62] net/iavf: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 26/62] net/i40e: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 27/62] net/idpf: " Stephen Hemminger
2026-09-14 5:46 ` [PATCH 28/62] net/cpfl: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 29/62] net/ixgbe: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 30/62] net/txgbe: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 31/62] net/octeontx: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 32/62] net/octeon_ep: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 33/62] net/qede: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 34/62] net/nfb: " Stephen Hemminger
2026-09-14 14:44 ` Martin Spinler
2026-09-14 5:47 ` [PATCH 35/62] net/thunderx: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 36/62] net/i40e: propagate VF queue number parse errors Stephen Hemminger
2026-09-14 5:47 ` [PATCH 37/62] net/cnxk: use kvargs numeric helpers Stephen Hemminger
2026-09-14 5:47 ` [PATCH 38/62] net/xsc: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 39/62] net/hns3: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 40/62] net/enetc: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 41/62] event/dlb2: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 42/62] net/nfp: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 43/62] drivers/crypto: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 44/62] event/sw: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 45/62] net/bnxt: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 46/62] net/bnxt: propagate devargs parsing errors Stephen Hemminger
2026-09-14 5:47 ` [PATCH 47/62] net/mlx4: use kvargs numeric helpers Stephen Hemminger
2026-09-14 5:47 ` [PATCH 48/62] net/sfc: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 49/62] crypto/mvsam: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 50/62] ml/cnxk: use kvargs numeric helpers in cn10k Stephen Hemminger
2026-09-14 5:47 ` [PATCH 51/62] ml/cnxk: use kvargs numeric helpers in mvtvm Stephen Hemminger
2026-09-14 5:47 ` [PATCH 52/62] event/opdl: use kvargs numeric helpers Stephen Hemminger
2026-09-14 5:47 ` [PATCH 53/62] mempool/cnxk: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 54/62] event/octeontx: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 55/62] baseband/turbo_sw: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 56/62] baseband/la12xx: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 57/62] dma/hisi_acc: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 58/62] crypto/virtio: " Stephen Hemminger
2026-09-14 5:47 ` [PATCH 59/62] net/ice: use kvargs hex helper for debug mask Stephen Hemminger
2026-09-14 5:47 ` [PATCH 60/62] net/hns3: use kvargs hex helper for capability mask Stephen Hemminger
2026-09-14 5:47 ` [PATCH 61/62] net/cxgbe: use kvargs numeric helpers Stephen Hemminger
2026-09-14 5:47 ` [PATCH 62/62] doc: note kvargs devargs conversion in release notes Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 00/61] kvargs: add numeric conversion helpers Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 01/61] " Stephen Hemminger
2026-09-30 0:49 ` fengchengwen
2026-09-29 16:36 ` [PATCH v2 02/61] kvargs: add a socket ID handler Stephen Hemminger
2026-09-30 1:01 ` fengchengwen
2026-09-29 16:36 ` [PATCH v2 03/61] kvargs: add hexadecimal conversion helpers Stephen Hemminger
2026-09-30 1:07 ` fengchengwen
2026-09-29 16:36 ` [PATCH v2 04/61] eal: validate memory size arguments Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 05/61] net/null: use kvargs numeric helpers Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 06/61] net/vhost: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 07/61] vdpa/ifc: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 08/61] net/softnic: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 09/61] dma/skeleton: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 10/61] raw/skeleton: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 11/61] baseband/null: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 12/61] net/memif: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 13/61] net/af_packet: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 14/61] net/pcap: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 15/61] net/ring: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 16/61] net/af_xdp: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 17/61] net/ark: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 18/61] net/failsafe: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 19/61] net/virtio: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 20/61] net/bonding: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 21/61] net/ena: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 22/61] net/netvsc: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 23/61] net/ice: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 24/61] net/iavf: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 25/61] net/i40e: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 26/61] net/idpf: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 27/61] net/cpfl: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 28/61] net/ixgbe: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 29/61] net/txgbe: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 30/61] net/octeontx: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 31/61] net/octeon_ep: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 32/61] net/qede: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 33/61] net/nfb: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 34/61] net/thunderx: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 35/61] net/i40e: propagate VF queue number parse errors Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 36/61] net/cnxk: use kvargs numeric helpers Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 37/61] net/xsc: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 38/61] net/hns3: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 39/61] net/enetc: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 40/61] event/dlb2: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 41/61] net/nfp: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 42/61] drivers/crypto: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 43/61] event/sw: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 44/61] net/bnxt: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 45/61] net/bnxt: propagate devargs parsing errors Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 46/61] net/mlx4: use kvargs numeric helpers Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 47/61] net/sfc: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 48/61] crypto/mvsam: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 49/61] ml/cnxk: use kvargs numeric helpers in cn10k Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 50/61] ml/cnxk: use kvargs numeric helpers in mvtvm Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 51/61] event/opdl: use kvargs numeric helpers Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 52/61] mempool/cnxk: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 53/61] event/octeontx: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 54/61] baseband/turbo_sw: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 55/61] baseband/la12xx: " Stephen Hemminger
2026-09-29 16:36 ` [PATCH v2 56/61] dma/hisi_acc: " Stephen Hemminger
2026-09-29 16:37 ` [PATCH v2 57/61] crypto/virtio: " Stephen Hemminger
2026-09-29 16:37 ` [PATCH v2 58/61] net/ice: use kvargs hex helper for debug mask Stephen Hemminger
2026-09-29 16:37 ` [PATCH v2 59/61] net/hns3: use kvargs hex helper for capability mask Stephen Hemminger
2026-09-29 16:37 ` [PATCH v2 60/61] net/cxgbe: use kvargs numeric helpers Stephen Hemminger
2026-09-29 16:37 ` [PATCH v2 61/61] doc: note kvargs devargs conversion in release notes Stephen Hemminger
2026-09-30 1:14 ` [PATCH v2 00/61] kvargs: add numeric conversion helpers fengchengwen
2026-09-30 15:21 ` Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 00/65] " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 01/65] net/ring: make numa node signed Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 02/65] kvargs: add numeric conversion helpers Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 03/65] kvargs: add a socket ID handler Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 04/65] kvargs: add hexadecimal conversion helpers Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 05/65] eal: validate memory size arguments Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 06/65] net/null: use kvargs numeric helpers Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 07/65] net/vhost: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 08/65] vdpa/ifc: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 09/65] net/softnic: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 10/65] dma/skeleton: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 11/65] raw/skeleton: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 12/65] baseband/null: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 13/65] net/memif: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 14/65] net/af_packet: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 15/65] net/pcap: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 16/65] net/ring: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 17/65] net/af_xdp: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 18/65] net/ark: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 19/65] net/failsafe: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 20/65] net/virtio: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 21/65] net/bonding: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 22/65] net/ena: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 23/65] net/netvsc: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 24/65] net/ice: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 25/65] net/iavf: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 26/65] net/i40e: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 27/65] net/idpf: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 28/65] net/cpfl: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 29/65] net/ixgbe: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 30/65] net/txgbe: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 31/65] net/octeontx: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 32/65] net/octeon_ep: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 33/65] net/qede: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 34/65] net/nfb: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 35/65] net/thunderx: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 36/65] net/i40e: propagate VF queue number parse errors Stephen Hemminger
2026-09-30 22:40 ` Stephen Hemminger [this message]
2026-09-30 22:40 ` [PATCH v3 38/65] net/xsc: use kvargs numeric helpers Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 39/65] net/hns3: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 40/65] net/enetc: " Stephen Hemminger
2026-09-30 22:40 ` [PATCH v3 41/65] event/dlb2: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 42/65] net/nfp: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 43/65] drivers/crypto: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 44/65] event/sw: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 45/65] net/bnxt: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 46/65] net/bnxt: propagate devargs parsing errors Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 47/65] net/mlx4: use kvargs numeric helpers Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 48/65] net/sfc: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 49/65] crypto/mvsam: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 50/65] ml/cnxk: use kvargs numeric helpers in cn10k Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 51/65] ml/cnxk: use kvargs numeric helpers in mvtvm Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 52/65] event/opdl: use kvargs numeric helpers Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 53/65] mempool/cnxk: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 54/65] event/octeontx: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 55/65] baseband/turbo_sw: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 56/65] baseband/la12xx: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 57/65] dma/hisi_acc: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 58/65] crypto/virtio: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 59/65] net/ice: use kvargs hex helper for debug mask Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 60/65] net/hns3: use kvargs hex helper for capability mask Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 61/65] net/cxgbe: use kvargs numeric helpers Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 62/65] kvargs: add range conversion handlers Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 63/65] event/sw: use kvargs range handlers Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 64/65] net/cnxk: " Stephen Hemminger
2026-09-30 22:41 ` [PATCH v3 65/65] doc: note kvargs devargs conversion in release notes Stephen Hemminger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260930224340.58580-38-stephen@networkplumber.org \
--to=stephen@networkplumber.org \
--cc=dev@dpdk.org \
--cc=hkalra@marvell.com \
--cc=kirankumark@marvell.com \
--cc=ndabilpuram@marvell.com \
--cc=skori@marvell.com \
--cc=skoteshwar@marvell.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox