[PATCH 44/62] event/sw: use kvargs numeric helpers
From: Stephen Hemminger <stephen@networkplumber.org>
Date: 2026-09-14 05:53:44
Subsystem:
the rest · Maintainer:
Linus Torvalds
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@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