[PATCH v2 21/61] net/ena: use kvargs numeric helpers
Stephen Hemminger
stephen at networkplumber.org
Tue Sep 29 18:36:24 CEST 2026
ena_process_uint_devarg() only checks that strtoull() consumed at least
one character, so trailing garbage such as "8junk" is accepted, and a
negative value is silently wrapped to a huge unsigned value.
ena_process_llq_policy_devarg() ignores the end pointer entirely, so any
unparsable value becomes zero and disables the LLQ policy rather than
being rejected.
ena_process_bool_devarg() only served enable_frag_bypass, and did
nothing beyond accepting "0" or "1" and storing into a bool, so drop it
and point rte_kvargs_handle_bool() at the field. A bare
"enable_frag_bypass" now enables it, along with the usual spellings.
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
drivers/net/ena/ena_ethdev.c | 45 +++++-------------------------------
1 file changed, 6 insertions(+), 39 deletions(-)
diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c
index ae48afcfdc..732f5f6f34 100644
--- a/drivers/net/ena/ena_ethdev.c
+++ b/drivers/net/ena/ena_ethdev.c
@@ -48,8 +48,6 @@
#define BITS_PER_TYPE(type) (sizeof(type) * BITS_PER_BYTE)
-#define DECIMAL_BASE 10
-
#define MAX_WIDE_LLQ_DEPTH_UNSUPPORTED 0
#define ENA_TS_OFFSET_UNSET -1
@@ -321,9 +319,6 @@ static int ena_xstats_get_by_id(struct rte_eth_dev *dev,
static int ena_process_llq_policy_devarg(const char *key,
const char *value,
void *opaque);
-static int ena_process_bool_devarg(const char *key,
- const char *value,
- void *opaque);
static int ena_parse_devargs(struct ena_adapter *adapter,
struct rte_devargs *devargs);
static void ena_copy_customer_metrics(struct ena_adapter *adapter,
@@ -3832,11 +3827,9 @@ static int ena_process_uint_devarg(const char *key,
void *opaque)
{
struct ena_adapter *adapter = opaque;
- char *str_end;
uint64_t uint64_value;
- uint64_value = strtoull(value, &str_end, DECIMAL_BASE);
- if (value == str_end) {
+ if (rte_kvargs_to_uint(value, 0, UINT64_MAX, &uint64_value) < 0) {
PMD_INIT_LOG_LINE(ERR,
"Invalid value for key '%s'. Only uint values are accepted.",
key);
@@ -3881,17 +3874,15 @@ static int ena_process_uint_devarg(const char *key,
static int ena_process_llq_policy_devarg(const char *key, const char *value, void *opaque)
{
struct ena_adapter *adapter = opaque;
- uint32_t policy;
+ uint64_t policy;
- policy = strtoul(value, NULL, DECIMAL_BASE);
- if (policy < ENA_LLQ_POLICY_LAST) {
- adapter->llq_header_policy = policy;
- } else {
+ if (rte_kvargs_to_uint(value, 0, ENA_LLQ_POLICY_LAST - 1, &policy) < 0) {
PMD_INIT_LOG_LINE(ERR,
"Invalid value: '%s' for key '%s'. valid [0-3]",
value, key);
return -EINVAL;
}
+ adapter->llq_header_policy = policy;
PMD_INIT_LOG_LINE(INFO,
"LLQ policy is %u [0 - disabled, 1 - device recommended, 2 - normal, 3 - large]",
adapter->llq_header_policy);
@@ -3899,30 +3890,6 @@ static int ena_process_llq_policy_devarg(const char *key, const char *value, voi
return 0;
}
-static int ena_process_bool_devarg(const char *key, const char *value, void *opaque)
-{
- struct ena_adapter *adapter = opaque;
- bool bool_value;
-
- /* Parse the value. */
- if (strcmp(value, "1") == 0) {
- bool_value = true;
- } else if (strcmp(value, "0") == 0) {
- bool_value = false;
- } else {
- PMD_INIT_LOG_LINE(ERR,
- "Invalid value: '%s' for key '%s'. Accepted: '0' or '1'",
- value, key);
- return -EINVAL;
- }
-
- /* Now, assign it to the proper adapter field. */
- if (strcmp(key, ENA_DEVARG_ENABLE_FRAG_BYPASS) == 0)
- adapter->enable_frag_bypass = bool_value;
-
- return 0;
-}
-
static int ena_parse_devargs(struct ena_adapter *adapter, struct rte_devargs *devargs)
{
static const char * const allowed_args[] = {
@@ -3956,8 +3923,8 @@ static int ena_parse_devargs(struct ena_adapter *adapter, struct rte_devargs *de
ena_process_uint_devarg, adapter);
if (rc != 0)
goto exit;
- rc = rte_kvargs_process(kvlist, ENA_DEVARG_ENABLE_FRAG_BYPASS,
- ena_process_bool_devarg, adapter);
+ rc = rte_kvargs_process_opt(kvlist, ENA_DEVARG_ENABLE_FRAG_BYPASS,
+ rte_kvargs_handle_bool, &adapter->enable_frag_bypass);
if (rc != 0)
goto exit;
--
2.53.0
More information about the dev
mailing list