}
static void
-verify_my_affinity (int nproc, size_t size, const cpu_set_t *expected_set)
+verify_my_affinity (int nproc, int nproc_configured, size_t size,
+ const cpu_set_t *expected_set)
{
- cpu_set_t *set = CPU_ALLOC (nproc);
- cpu_set_t *xor_set = CPU_ALLOC (nproc);
+ 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");
struct test_param
{
int nproc;
+ int nproc_configured;
cpu_set_t *set;
size_t size;
bool entry;
struct test_param *param = arg;
printf ("%d:%d child\n", getpid (), gettid ());
- verify_my_affinity (param->nproc, param->size, param->set);
+ verify_my_affinity (param->nproc, param->nproc_configured, param->size,
+ param->set);
return NULL;
}
else
{
/* Verification for the first level. */
- verify_my_affinity (param->nproc, param->size, param->set);
+ verify_my_affinity (param->nproc, param->nproc_configured, param->size,
+ param->set);
/* Launch the second level test, launching CHILD_TEST as a subprocess and
then as a subthread. Use a different mask to see if it gets
static int
do_test (void)
{
+ /* Large enough in case the kernel decides to return the larger mask. This
+ seems to happen on some kernels for S390x. */
+ int num_configured_cpus = get_nprocs_conf ();
int num_cpus = get_nprocs ();
struct test_param param =
{
.nproc = num_cpus,
- .set = CPU_ALLOC (num_cpus),
- .size = CPU_ALLOC_SIZE (num_cpus),
+ .nproc_configured = num_configured_cpus,
+ .set = CPU_ALLOC (num_configured_cpus),
+ .size = CPU_ALLOC_SIZE (num_configured_cpus),
.entry = true,
};
}
static void
-verify_my_affinity (int nproc, size_t size, const cpu_set_t *expected_set)
+verify_my_affinity (int nproc, int nproc_configured, size_t size,
+ const cpu_set_t *expected_set)
{
- cpu_set_t *set = CPU_ALLOC (nproc);
- cpu_set_t *xor_set = CPU_ALLOC (nproc);
+ 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");