diff options
Diffstat (limited to 'third_party/nix/src/libutil/affinity.cc')
-rw-r--r-- | third_party/nix/src/libutil/affinity.cc | 48 |
1 files changed, 20 insertions, 28 deletions
diff --git a/third_party/nix/src/libutil/affinity.cc b/third_party/nix/src/libutil/affinity.cc index 98f8287ada67..faee4926d579 100644 --- a/third_party/nix/src/libutil/affinity.cc +++ b/third_party/nix/src/libutil/affinity.cc @@ -1,6 +1,6 @@ +#include "affinity.hh" #include "types.hh" #include "util.hh" -#include "affinity.hh" #if __linux__ #include <sched.h> @@ -8,48 +8,40 @@ namespace nix { - #if __linux__ static bool didSaveAffinity = false; static cpu_set_t savedAffinity; #endif - -void setAffinityTo(int cpu) -{ +void setAffinityTo(int cpu) { #if __linux__ - if (sched_getaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1) return; - didSaveAffinity = true; - debug(format("locking this thread to CPU %1%") % cpu); - cpu_set_t newAffinity; - CPU_ZERO(&newAffinity); - CPU_SET(cpu, &newAffinity); - if (sched_setaffinity(0, sizeof(cpu_set_t), &newAffinity) == -1) - printError(format("failed to lock thread to CPU %1%") % cpu); + if (sched_getaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1) return; + didSaveAffinity = true; + debug(format("locking this thread to CPU %1%") % cpu); + cpu_set_t newAffinity; + CPU_ZERO(&newAffinity); + CPU_SET(cpu, &newAffinity); + if (sched_setaffinity(0, sizeof(cpu_set_t), &newAffinity) == -1) + printError(format("failed to lock thread to CPU %1%") % cpu); #endif } - -int lockToCurrentCPU() -{ +int lockToCurrentCPU() { #if __linux__ - int cpu = sched_getcpu(); - if (cpu != -1) setAffinityTo(cpu); - return cpu; + int cpu = sched_getcpu(); + if (cpu != -1) setAffinityTo(cpu); + return cpu; #else - return -1; + return -1; #endif } - -void restoreAffinity() -{ +void restoreAffinity() { #if __linux__ - if (!didSaveAffinity) return; - if (sched_setaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1) - printError("failed to restore affinity %1%"); + if (!didSaveAffinity) return; + if (sched_setaffinity(0, sizeof(cpu_set_t), &savedAffinity) == -1) + printError("failed to restore affinity %1%"); #endif } - -} +} // namespace nix |