From: Lukas Sismis Date: Tue, 1 Jul 2025 19:43:19 +0000 (+0200) Subject: dpdk: auto threads assign one too many threads X-Git-Tag: suricata-8.0.0~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F13565%2Fhead;p=thirdparty%2Fsuricata.git dpdk: auto threads assign one too many threads Configuration option `threads: auto` in DPDK's interface node overassigns available threads to the interface. Commit 4dfd44d3 changed the signedness of the remaining threads counter, which caused surpass of the counter initialization. The if-clause is switched to first initialize and then use the counter. Ticket: 7798 --- diff --git a/src/runmode-dpdk.c b/src/runmode-dpdk.c index 496d830a28..d0bbab5c07 100644 --- a/src/runmode-dpdk.c +++ b/src/runmode-dpdk.c @@ -447,16 +447,16 @@ static int ConfigSetThreads(DPDKIfaceConfig *iconf, const char *entry_str) SCReturnInt(-ERANGE); } - if (remaining_auto_cpus > 0) { - iconf->threads++; - remaining_auto_cpus--; - } else if (remaining_auto_cpus == UINT16_MAX) { + if (remaining_auto_cpus == UINT16_MAX) { // first time auto-assignment remaining_auto_cpus = sched_cpus % live_dev_count; if (remaining_auto_cpus > 0) { iconf->threads++; remaining_auto_cpus--; } + } else if (remaining_auto_cpus > 0) { + iconf->threads++; + remaining_auto_cpus--; } SCLogConfig("%s: auto-assigned %u threads", iconf->iface, iconf->threads); SCReturnInt(0);