affinity: lock get next cpu function

The function getting next CPU to use need to be locked as init of
the threads are done concurrently.
remotes/origin/master-1.1.x
Eric Leblond 15 years ago committed by Victor Julien
parent 0b5e5b8772
commit aedb61b7d2

@ -110,6 +110,7 @@ static void AffinitySetupInit()
for (j = 0; j < ncpu; j++) { for (j = 0; j < ncpu; j++) {
CPU_SET(j, cs); CPU_SET(j, cs);
} }
SCMutexInit(&thread_affinity[i].taf_mutex, NULL);
} }
return; return;
@ -276,7 +277,10 @@ void AffinitySetupLoadFromConfig()
*/ */
int AffinityGetNextCPU(ThreadsAffinityType *taf) int AffinityGetNextCPU(ThreadsAffinityType *taf)
{ {
int ncpu = taf->lcpu; int ncpu = 0;
SCMutexLock(&taf->taf_mutex);
ncpu = taf->lcpu;
while (!CPU_ISSET(ncpu, &taf->cpu_set)) { while (!CPU_ISSET(ncpu, &taf->cpu_set)) {
ncpu++; ncpu++;
if (ncpu >= UtilCpuGetNumProcessorsOnline()) if (ncpu >= UtilCpuGetNumProcessorsOnline())
@ -285,5 +289,7 @@ int AffinityGetNextCPU(ThreadsAffinityType *taf)
taf->lcpu = ncpu + 1; taf->lcpu = ncpu + 1;
if (taf->lcpu >= UtilCpuGetNumProcessorsOnline()) if (taf->lcpu >= UtilCpuGetNumProcessorsOnline())
taf->lcpu = 0; taf->lcpu = 0;
SCMutexUnlock(&taf->taf_mutex);
SCLogInfo("Setting affinity on CPU %d", ncpu);
return ncpu; return ncpu;
} }

@ -52,6 +52,7 @@ typedef struct ThreadsAffinityType_ {
cpu_set_t lowprio_cpu; cpu_set_t lowprio_cpu;
cpu_set_t medprio_cpu; cpu_set_t medprio_cpu;
cpu_set_t hiprio_cpu; cpu_set_t hiprio_cpu;
SCMutex taf_mutex;
uint16_t lcpu; /* use by exclusive mode */ uint16_t lcpu; /* use by exclusive mode */
} ThreadsAffinityType; } ThreadsAffinityType;

Loading…
Cancel
Save