From 223356bfb5ca10c12b981da32d12e7c69d1092d5 Mon Sep 17 00:00:00 2001 From: Lukas Sismis Date: Tue, 25 Jul 2023 13:07:39 +0200 Subject: [PATCH] dpdk: fix DPDK thread check for IPS mode Ticket: #6233 --- src/runmode-dpdk.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/runmode-dpdk.c b/src/runmode-dpdk.c index 339344d14f..a3caeb5a90 100644 --- a/src/runmode-dpdk.c +++ b/src/runmode-dpdk.c @@ -357,7 +357,6 @@ static int ConfigSetThreads(DPDKIfaceConfig *iconf, const char *entry_str) { SCEnter(); static int32_t remaining_auto_cpus = -1; - static uint32_t total_cpus = 0; if (!threading_set_cpu_affinity) { SCLogError("DPDK runmode requires configured thread affinity"); SCReturnInt(-EINVAL); @@ -432,12 +431,6 @@ static int ConfigSetThreads(DPDKIfaceConfig *iconf, const char *entry_str) SCReturnInt(-ERANGE); } - total_cpus += iconf->threads; - if (total_cpus > sched_cpus) { - SCLogError("Interfaces requested more cores than configured in the threading section"); - SCReturnInt(-ERANGE); - } - SCReturnInt(0); } @@ -801,6 +794,25 @@ static int ConfigLoad(DPDKIfaceConfig *iconf, const char *iface) SCReturnInt(0); } +static int32_t ConfigValidateThreads(uint16_t iface_threads) +{ + static uint32_t total_cpus = 0; + total_cpus += iface_threads; + ThreadsAffinityType *wtaf = GetAffinityTypeFromName("worker-cpu-set"); + if (wtaf == NULL) { + SCLogError("Specify worker-cpu-set list in the threading section"); + return -1; + } + if (total_cpus > UtilAffinityGetAffinedCPUNum(wtaf)) { + SCLogError("Interfaces requested more cores than configured in the threading section " + "(requested %d configured %d", + total_cpus, UtilAffinityGetAffinedCPUNum(wtaf)); + return -1; + } + + return 0; +} + static DPDKIfaceConfig *ConfigParse(const char *iface) { SCEnter(); @@ -811,7 +823,7 @@ static DPDKIfaceConfig *ConfigParse(const char *iface) ConfigInit(&iconf); retval = ConfigLoad(iconf, iface); - if (retval < 0) { + if (retval < 0 || ConfigValidateThreads(iconf->threads) != 0) { iconf->DerefFunc(iconf); SCReturnPtr(NULL, "void *"); } -- 2.47.2