diff --git a/src/plugins/task/affinity/affinity.c b/src/plugins/task/affinity/affinity.c index 21a44a3221f1d929e5741124a6b44bc0c6cd38ca..f8656a81b3a4c26b9d6700c5470e067e565bff16 100644 --- a/src/plugins/task/affinity/affinity.c +++ b/src/plugins/task/affinity/affinity.c @@ -309,15 +309,20 @@ static bool _is_power_cpu(void) * set system call. */ void reset_cpuset(cpu_set_t *new_mask, cpu_set_t *cur_mask) { - cpu_set_t newer_mask; + cpu_set_t full_mask, newer_mask; int cur_offset, new_offset = 0, last_set = -1; if (!_is_power_cpu()) return; + if (slurm_getaffinity(1, sizeof(full_mask), &full_mask)) { + /* Try to get full CPU mask from process init */ + CPU_ZERO(&full_mask); + CPU_OR(&full_mask, &full_mask, cur_mask); + } CPU_ZERO(&newer_mask); for (cur_offset = 0; cur_offset < CPU_SETSIZE; cur_offset++) { - if (!CPU_ISSET(cur_offset, cur_mask)) + if (!CPU_ISSET(cur_offset, &full_mask)) continue; if (CPU_ISSET(new_offset, new_mask)) { CPU_SET(cur_offset, &newer_mask);