Пример #1
0
/**
 * _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;
}
Пример #2
0
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;
}