/* CPU Affinity inheritance test - sched_{gs}etaffinity.
Copyright The GNU Toolchain Authors.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
. */
/* See top level comment in nptl/tst-skeleton-affinity-inheritance.c for a
description of this test. */
#include
#include
#include
#include
static void
set_my_affinity (size_t size, const cpu_set_t *set)
{
int ret = sched_setaffinity (0, size, set);
if (ret != 0)
FAIL ("sched_setaffinity returned %d (%s)", ret, strerror (ret));
}
static void
verify_my_affinity (int nproc, int nproc_configured, size_t size,
const cpu_set_t *expected_set)
{
cpu_set_t *set = CPU_ALLOC (nproc_configured);
cpu_set_t *xor_set = CPU_ALLOC (nproc_configured);
if (set == NULL || xor_set== NULL)
FAIL_EXIT1 ("verify_my_affinity: Failed to allocate cpuset: %m\n");
int ret = sched_getaffinity (0, size, set);
if (ret != 0)
FAIL ("sched_getaffinity returned %d (%s)", ret, strerror (ret));
CPU_XOR_S (size, xor_set, expected_set, set);
int cpucount = CPU_COUNT_S (size, xor_set);
if (cpucount > 0)
{
FAIL ("Affinity mask not inherited, "
"following %d CPUs mismatched in the expected and actual sets:\n",
cpucount);
for (int cur = 0; cur < nproc && cpucount >= 0; cur++)
if (CPU_ISSET_S (size, cur, xor_set))
{
printf ("%d ", cur);
cpucount--;
}
printf ("\n");
}
CPU_FREE (set);
CPU_FREE (xor_set);
}
#include