48 lines
1.6 KiB
Diff
48 lines
1.6 KiB
Diff
From 014f12bb095382770f000055f63f82e2903f6b33 Mon Sep 17 00:00:00 2001
|
|
From: q66 <q66@chimera-linux.org>
|
|
Date: Sat, 23 Mar 2024 20:51:52 +0100
|
|
Subject: [PATCH] Use CPU_COUNT to get the number of set CPUs
|
|
|
|
This fixes an issue with the number getting very big due to
|
|
CPU_ISSET not returning exactly 0 or 1.
|
|
|
|
This also fixes scenarios where there are holes in the CPU
|
|
set. E.g. for a simple run like `taskset --cpu-list 1,2,4 ...`
|
|
the old code would return 2 instead of 3, due to iterating
|
|
until `ncores` (which is 3) and therefore not accounting for
|
|
CPUs further in the set.
|
|
|
|
Ref https://gitlab.gnome.org/GNOME/glib/-/merge_requests/3784
|
|
|
|
|
|
(cherry picked from commit cc25486b233ada380ac8452f47f5fb35536888f4)
|
|
---
|
|
glib/gthread.c | 4 +---
|
|
1 file changed, 1 insertion(+), 3 deletions(-)
|
|
|
|
diff --git a/glib/gthread.c b/glib/gthread.c
|
|
index b39acc475c..a264353ecb 100644
|
|
--- a/glib/gthread.c
|
|
+++ b/glib/gthread.c
|
|
@@ -1092,7 +1092,6 @@ g_get_num_processors (void)
|
|
return count;
|
|
#elif defined(_SC_NPROCESSORS_ONLN) && defined(THREADS_POSIX) && defined(HAVE_PTHREAD_GETAFFINITY_NP)
|
|
{
|
|
- int idx;
|
|
int ncores = MIN (sysconf (_SC_NPROCESSORS_ONLN), CPU_SETSIZE);
|
|
cpu_set_t cpu_mask;
|
|
CPU_ZERO (&cpu_mask);
|
|
@@ -1100,8 +1099,7 @@ g_get_num_processors (void)
|
|
int af_count = 0;
|
|
int err = pthread_getaffinity_np (pthread_self (), sizeof (cpu_mask), &cpu_mask);
|
|
if (!err)
|
|
- for (idx = 0; idx < ncores && idx < CPU_SETSIZE; ++idx)
|
|
- af_count += CPU_ISSET (idx, &cpu_mask);
|
|
+ af_count = CPU_COUNT (&cpu_mask);
|
|
|
|
int count = (af_count > 0) ? af_count : ncores;
|
|
return count;
|
|
--
|
|
GitLab
|
|
|