mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 07:17:44 +00:00
util: assume modern CPU_ALLOC macros always exist
Support for the modern CPU_ALLOC macros was added 10 years ago in
commit a73cd93b24
Author: Daniel P. Berrange <berrange@redhat.com>
Date: Mon Nov 16 16:08:29 2009 +0000
Alternate CPU affinity impl to cope with NR_CPUS > 1024
This is long enough that we can assume it always exists and drop the
back compat code.
Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
3918fb0dc1
commit
2a5bc13639
@ -422,8 +422,6 @@ int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
|
|||||||
{
|
{
|
||||||
size_t i;
|
size_t i;
|
||||||
VIR_DEBUG("Set process affinity on %lld", (long long)pid);
|
VIR_DEBUG("Set process affinity on %lld", (long long)pid);
|
||||||
# ifdef CPU_ALLOC
|
|
||||||
/* New method dynamically allocates cpu mask, allowing unlimted cpus */
|
|
||||||
int numcpus = 1024;
|
int numcpus = 1024;
|
||||||
size_t masklen;
|
size_t masklen;
|
||||||
cpu_set_t *mask;
|
cpu_set_t *mask;
|
||||||
@ -462,22 +460,6 @@ int virProcessSetAffinity(pid_t pid, virBitmapPtr map)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
CPU_FREE(mask);
|
CPU_FREE(mask);
|
||||||
# else
|
|
||||||
/* Legacy method uses a fixed size cpu mask, only allows up to 1024 cpus */
|
|
||||||
cpu_set_t mask;
|
|
||||||
|
|
||||||
CPU_ZERO(&mask);
|
|
||||||
for (i = 0; i < virBitmapSize(map); i++) {
|
|
||||||
if (virBitmapIsBitSet(map, i))
|
|
||||||
CPU_SET(i, &mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sched_setaffinity(pid, sizeof(mask), &mask) < 0) {
|
|
||||||
virReportSystemError(errno,
|
|
||||||
_("cannot set CPU affinity on process %d"), pid);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -491,7 +473,6 @@ virProcessGetAffinity(pid_t pid)
|
|||||||
size_t ncpus;
|
size_t ncpus;
|
||||||
virBitmapPtr ret = NULL;
|
virBitmapPtr ret = NULL;
|
||||||
|
|
||||||
# ifdef CPU_ALLOC
|
|
||||||
/* 262144 cpus ought to be enough for anyone */
|
/* 262144 cpus ought to be enough for anyone */
|
||||||
ncpus = 1024 << 8;
|
ncpus = 1024 << 8;
|
||||||
masklen = CPU_ALLOC_SIZE(ncpus);
|
masklen = CPU_ALLOC_SIZE(ncpus);
|
||||||
@ -503,14 +484,6 @@ virProcessGetAffinity(pid_t pid)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CPU_ZERO_S(masklen, mask);
|
CPU_ZERO_S(masklen, mask);
|
||||||
# else
|
|
||||||
ncpus = 1024;
|
|
||||||
if (VIR_ALLOC(mask) < 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
masklen = sizeof(*mask);
|
|
||||||
CPU_ZERO(mask);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
if (sched_getaffinity(pid, masklen, mask) < 0) {
|
if (sched_getaffinity(pid, masklen, mask) < 0) {
|
||||||
virReportSystemError(errno,
|
virReportSystemError(errno,
|
||||||
@ -522,22 +495,13 @@ virProcessGetAffinity(pid_t pid)
|
|||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
for (i = 0; i < ncpus; i++) {
|
for (i = 0; i < ncpus; i++) {
|
||||||
# ifdef CPU_ALLOC
|
|
||||||
/* coverity[overrun-local] */
|
/* coverity[overrun-local] */
|
||||||
if (CPU_ISSET_S(i, masklen, mask))
|
if (CPU_ISSET_S(i, masklen, mask))
|
||||||
ignore_value(virBitmapSetBit(ret, i));
|
ignore_value(virBitmapSetBit(ret, i));
|
||||||
# else
|
|
||||||
if (CPU_ISSET(i, mask))
|
|
||||||
ignore_value(virBitmapSetBit(ret, i));
|
|
||||||
# endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
# ifdef CPU_ALLOC
|
|
||||||
CPU_FREE(mask);
|
CPU_FREE(mask);
|
||||||
# else
|
|
||||||
VIR_FREE(mask);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user