/** * _CPU_set_Is_valid * * This routine validates a cpuset size corresponds to * the system correct size, that at least one * valid cpu is set and that no invalid cpus are set. */ bool _CPU_set_Is_valid( const cpu_set_t *cpuset, size_t setsize ) { cpu_set_t temp; if ( !cpuset ) return false; if ( setsize != cpuset_default.setsize ) return false; /* Validate at least 1 valid cpu is set in cpuset */ CPU_AND_S( cpuset_default.setsize, &temp, cpuset, cpuset_default.set ); if ( CPU_COUNT_S( setsize, &temp ) == 0 ) return false; /* Validate that no invalid cpu's are set in cpuset */ if ( !CPU_EQUAL_S( setsize, &temp, cpuset ) ) return false; return true; }
bool gomp_affinity_finalize_place_list (bool quiet) { unsigned long i, j; for (i = 0, j = 0; i < gomp_places_list_len; i++) { cpu_set_t *cpusetp = (cpu_set_t *) gomp_places_list[i]; bool nonempty = false; #ifdef CPU_AND_S CPU_AND_S (gomp_cpuset_size, cpusetp, cpusetp, gomp_cpusetp); nonempty = gomp_cpuset_popcount (gomp_cpuset_size, cpusetp) != 0; #else unsigned long k, max = gomp_cpuset_size / sizeof (cpusetp->__bits[0]); for (k = 0; k < max; k++) if ((cpusetp->__bits[k] &= gomp_cpusetp->__bits[k]) != 0) nonempty = true; #endif if (nonempty) gomp_places_list[j++] = gomp_places_list[i]; } if (j == 0) { if (!quiet) gomp_error ("None of the places contain usable logical CPUs"); return false; } else if (j < gomp_places_list_len) { if (!quiet) gomp_error ("Number of places reduced from %ld to %ld because some " "places didn't contain any usable logical CPUs", gomp_places_list_len, j); gomp_places_list_len = j; } return true; }