[PATCH v2 43/61] event/sw: use kvargs numeric helpers
Stephen Hemminger
stephen at networkplumber.org
Tue Sep 29 18:36:46 CEST 2026
All six handlers use atoi(), which cannot report an error, so a
malformed value is silently taken as zero. Since zero is within the
accepted range for every one of these arguments, a typo such as
"sched_quanta=abc" was accepted and quietly applied as zero.
The lower bound is now part of the conversion, so the separate negative
checks are no longer needed.
refill_once is a boolean, so drop set_refill_once() and use
rte_kvargs_handle_bool(). The registered parameter string said
"=<int>", which was never true, and now says "=<0|1>". A bare
"refill_once" enables it, and the usual spellings are accepted.
Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
---
drivers/event/sw/sw_evdev.c | 56 ++++++++++++++++---------------------
1 file changed, 24 insertions(+), 32 deletions(-)
diff --git a/drivers/event/sw/sw_evdev.c b/drivers/event/sw/sw_evdev.c
index 3ad82e94ac..fa9fe3e4c2 100644
--- a/drivers/event/sw/sw_evdev.c
+++ b/drivers/event/sw/sw_evdev.c
@@ -872,23 +872,16 @@ sw_close(struct rte_eventdev *dev)
return 0;
}
-static int
-assign_numa_node(const char *key __rte_unused, const char *value, void *opaque)
-{
- int *socket_id = opaque;
- *socket_id = atoi(value);
- if (*socket_id >= RTE_MAX_NUMA_NODES)
- return -1;
- return 0;
-}
-
static int
set_sched_quanta(const char *key __rte_unused, const char *value, void *opaque)
{
int *quanta = opaque;
- *quanta = atoi(value);
- if (*quanta < 0 || *quanta >= 4096)
+ uint64_t val;
+
+ if (rte_kvargs_to_uint(value, 0, 4095, &val) < 0)
return -1;
+
+ *quanta = val;
return 0;
}
@@ -896,9 +889,12 @@ static int
set_credit_quanta(const char *key __rte_unused, const char *value, void *opaque)
{
int *credit = opaque;
- *credit = atoi(value);
- if (*credit < 0 || *credit >= 128)
+ uint64_t val;
+
+ if (rte_kvargs_to_uint(value, 0, 127, &val) < 0)
return -1;
+
+ *credit = val;
return 0;
}
@@ -906,9 +902,12 @@ static int
set_deq_burst_sz(const char *key __rte_unused, const char *value, void *opaque)
{
int *deq_burst_sz = opaque;
- *deq_burst_sz = atoi(value);
- if (*deq_burst_sz < 0 || *deq_burst_sz > SCHED_DEQUEUE_MAX_BURST_SIZE)
+ uint64_t val;
+
+ if (rte_kvargs_to_uint(value, 0, SCHED_DEQUEUE_MAX_BURST_SIZE, &val) < 0)
return -1;
+
+ *deq_burst_sz = val;
return 0;
}
@@ -916,19 +915,12 @@ static int
set_min_burst_sz(const char *key __rte_unused, const char *value, void *opaque)
{
int *min_burst_sz = opaque;
- *min_burst_sz = atoi(value);
- if (*min_burst_sz < 0 || *min_burst_sz > SCHED_DEQUEUE_MAX_BURST_SIZE)
- return -1;
- return 0;
-}
+ uint64_t val;
-static int
-set_refill_once(const char *key __rte_unused, const char *value, void *opaque)
-{
- int *refill_once_per_call = opaque;
- *refill_once_per_call = atoi(value);
- if (*refill_once_per_call < 0 || *refill_once_per_call > 1)
+ if (rte_kvargs_to_uint(value, 0, SCHED_DEQUEUE_MAX_BURST_SIZE, &val) < 0)
return -1;
+
+ *min_burst_sz = val;
return 0;
}
@@ -991,7 +983,7 @@ sw_probe(struct rte_vdev_device *vdev)
int credit_quanta = SW_DEFAULT_CREDIT_QUANTA;
int min_burst_size = 1;
int deq_burst_size = SCHED_DEQUEUE_DEFAULT_BURST_SIZE;
- int refill_once = 0;
+ bool refill_once = false;
name = rte_vdev_device_name(vdev);
params = rte_vdev_device_args(vdev);
@@ -1004,7 +996,7 @@ sw_probe(struct rte_vdev_device *vdev)
name);
} else {
int ret = rte_kvargs_process(kvlist, NUMA_NODE_ARG,
- assign_numa_node, &socket_id);
+ rte_kvargs_handle_socket_id, &socket_id);
if (ret != 0) {
SW_LOG_ERR(
"%s: Error parsing numa node parameter",
@@ -1053,8 +1045,8 @@ sw_probe(struct rte_vdev_device *vdev)
return ret;
}
- ret = rte_kvargs_process(kvlist, REFIL_ONCE_ARG,
- set_refill_once, &refill_once);
+ ret = rte_kvargs_process_opt(kvlist, REFIL_ONCE_ARG,
+ rte_kvargs_handle_bool, &refill_once);
if (ret != 0) {
SW_LOG_ERR(
"%s: Error parsing refill once per call switch",
@@ -1146,5 +1138,5 @@ RTE_PMD_REGISTER_VDEV(EVENTDEV_NAME_SW_PMD, evdev_sw_pmd_drv);
RTE_PMD_REGISTER_PARAM_STRING(event_sw, NUMA_NODE_ARG "=<int> "
SCHED_QUANTA_ARG "=<int>" CREDIT_QUANTA_ARG "=<int>"
MIN_BURST_SIZE_ARG "=<int>" DEQ_BURST_SIZE_ARG "=<int>"
- REFIL_ONCE_ARG "=<int>");
+ REFIL_ONCE_ARG "=<0|1>");
RTE_LOG_REGISTER_DEFAULT(eventdev_sw_log_level, NOTICE);
--
2.53.0
More information about the dev
mailing list