]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
process-util: add new helper cpus_in_affinity_mask()
authorLennart Poettering <lennart@poettering.net>
Mon, 18 Mar 2019 16:41:27 +0000 (17:41 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 19 Mar 2019 14:55:07 +0000 (15:55 +0100)
Let's add a new helper for determining how many CPUs are configured for
us

src/basic/process-util.c
src/basic/process-util.h

index c41a2aa5c9fd0bd9da432533978ba691e465b85c..1f228be5d335935aa2e42f71ca1dea823a5c1c2a 100644 (file)
@@ -1535,6 +1535,40 @@ int set_oom_score_adjust(int value) {
                                  WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER);
 }
 
+int cpus_in_affinity_mask(void) {
+        size_t n = 16;
+        int r;
+
+        for (;;) {
+                cpu_set_t *c;
+
+                c = CPU_ALLOC(n);
+                if (!c)
+                        return -ENOMEM;
+
+                if (sched_getaffinity(0, CPU_ALLOC_SIZE(n), c) >= 0) {
+                        int k;
+
+                        k = CPU_COUNT_S(CPU_ALLOC_SIZE(n), c);
+                        CPU_FREE(c);
+
+                        if (k <= 0)
+                                return -EINVAL;
+
+                        return k;
+                }
+
+                r = -errno;
+                CPU_FREE(c);
+
+                if (r != -EINVAL)
+                        return r;
+                if (n > SIZE_MAX/2)
+                        return -ENOMEM;
+                n *= 2;
+        }
+}
+
 static const char *const ioprio_class_table[] = {
         [IOPRIO_CLASS_NONE] = "none",
         [IOPRIO_CLASS_RT] = "realtime",
index 9950723996fe22a3d8198be98c53a9f3b34714d5..f6eb82d6b61e2f5923fd1cc7efd88e4487d3de7a 100644 (file)
@@ -193,3 +193,5 @@ assert_cc(TASKS_MAX <= (unsigned long) PID_T_MAX)
                 (pid) = 0;                      \
                 _pid_;                          \
         })
+
+int cpus_in_affinity_mask(void);