MINOR: thread: implement the detection of forced cpu affinity

Create a function thread_cpu_mask_forced. Its purpose is to report if a
restrictive cpu mask is active for the current proces, for example due
to a taskset invocation. It is only implemented for the linux platform
currently.
This commit is contained in:
Amaury Denoyelle 2021-03-31 16:57:39 +02:00
parent 982fb53390
commit 4c9efdecf5
2 changed files with 17 additions and 0 deletions

View File

@ -277,6 +277,10 @@ static inline unsigned long thread_isolated()
return threads_want_rdv_mask & ~threads_harmless_mask & tid_bit;
}
/* Returns 1 if the cpu set is currently restricted for the process else 0.
* Currently only implemented for the Linux platform.
*/
int thread_cpu_mask_forced();
#if !defined(DEBUG_THREAD) && !defined(DEBUG_FULL)

View File

@ -193,6 +193,19 @@ static int thread_cpus_enabled()
return ret;
}
/* Returns 1 if the cpu set is currently restricted for the process else 0.
* Currently only implemented for the Linux platform.
*/
int thread_cpu_mask_forced()
{
#if defined(__linux__)
const int cpus_avail = sysconf(_SC_NPROCESSORS_ONLN);
return cpus_avail != thread_cpus_enabled();
#else
return 0;
#endif
}
/* Depending on the platform and how libpthread was built, pthread_exit() may
* involve some code in libgcc_s that would be loaded on exit for the first
* time, causing aborts if the process is chrooted. It's harmless bit very