Bug #290 » 0002-cpu-affinity-detect-a-missed-invalid-case.patch
| src/util-affinity.c | ||
|---|---|---|
|
return;
|
||
|
}
|
||
|
static void build_cpuset(ConfNode *node, cpu_set_t *cpu)
|
||
|
static void build_cpuset(char *name, ConfNode *node, cpu_set_t *cpu)
|
||
|
{
|
||
|
ConfNode *lnode;
|
||
|
TAILQ_FOREACH(lnode, &node->head, next) {
|
||
|
int i;
|
||
|
long int a,b;
|
||
|
int stop = 0;
|
||
|
int max = UtilCpuGetNumProcessorsOnline() - 1;
|
||
|
if (!strcmp(lnode->val, "all")) {
|
||
|
a = 0;
|
||
|
b = UtilCpuGetNumProcessorsOnline() - 1;
|
||
|
b = max;
|
||
|
stop = 1;
|
||
|
} else if (index(lnode->val, '-') != NULL) {
|
||
|
char *sep = index(lnode->val, '-');
|
||
| ... | ... | |
|
a = strtoul(lnode->val, &end, 10);
|
||
|
if (end != sep) {
|
||
|
SCLogError(SC_ERR_INVALID_ARGUMENT,
|
||
|
"invalid cpu range (start invalid): \"%s\"",
|
||
|
"%s: invalid cpu range (start invalid): \"%s\"",
|
||
|
name,
|
||
|
lnode->val);
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
b = strtol(sep + 1, &end, 10);
|
||
|
if (end != sep + strlen(sep)) {
|
||
|
SCLogError(SC_ERR_INVALID_ARGUMENT,
|
||
|
"invalid cpu range (end invalid): \"%s\"",
|
||
|
"%s: invalid cpu range (end invalid): \"%s\"",
|
||
|
name,
|
||
|
lnode->val);
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
if (a > b) {
|
||
|
SCLogError(SC_ERR_INVALID_ARGUMENT,
|
||
|
"invalid cpu range (bad order): \"%s\"",
|
||
|
"%s: invalid cpu range (bad order): \"%s\"",
|
||
|
name,
|
||
|
lnode->val);
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
if (b > max) {
|
||
|
SCLogError(SC_ERR_INVALID_ARGUMENT,
|
||
|
"%s: upper bound (%ld) of cpu set is too high, only %d cpu(s)",
|
||
|
name,
|
||
|
b, max + 1);
|
||
|
}
|
||
|
} else {
|
||
|
char *end;
|
||
|
a = strtoul(lnode->val, &end, 10);
|
||
|
if (end != lnode->val + strlen(lnode->val)) {
|
||
|
SCLogError(SC_ERR_INVALID_ARGUMENT,
|
||
|
"invalid cpu range (not an integer): \"%s\"",
|
||
|
"%s: invalid cpu range (not an integer): \"%s\"",
|
||
|
name,
|
||
|
lnode->val);
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
| ... | ... | |
|
if (node == NULL) {
|
||
|
SCLogInfo("unable to find 'cpu'");
|
||
|
} else {
|
||
|
build_cpuset(node, &taf->cpu_set);
|
||
|
build_cpuset(affinity->val, node, &taf->cpu_set);
|
||
|
}
|
||
|
CPU_ZERO(&taf->lowprio_cpu);
|
||
| ... | ... | |
|
if (node == NULL) {
|
||
|
SCLogDebug("unable to find 'low' prio using default value");
|
||
|
} else {
|
||
|
build_cpuset(node, &taf->lowprio_cpu);
|
||
|
build_cpuset(affinity->val, node, &taf->lowprio_cpu);
|
||
|
}
|
||
|
node = ConfNodeLookupChild(nprio, "medium");
|
||
|
if (node == NULL) {
|
||
|
SCLogDebug("unable to find 'medium' prio using default value");
|
||
|
} else {
|
||
|
build_cpuset(node, &taf->medprio_cpu);
|
||
|
build_cpuset(affinity->val, node, &taf->medprio_cpu);
|
||
|
}
|
||
|
node = ConfNodeLookupChild(nprio, "high");
|
||
|
if (node == NULL) {
|
||
|
SCLogDebug("unable to find 'high' prio using default value");
|
||
|
} else {
|
||
|
build_cpuset(node, &taf->hiprio_cpu);
|
||
|
build_cpuset(affinity->val, node, &taf->hiprio_cpu);
|
||
|
}
|
||
|
node = ConfNodeLookupChild(nprio, "default");
|
||
|
if (node != NULL) {
|
||
- « Previous
- 1
- 2
- Next »