glibc/sysdeps/unix/sysv/linux/tst-getcpu.c
Mike Frysinger 1214ec8f4c tst-getcpu: decode errno when sched_getcpu fails
The tst-getcpu test is failing on ia64 platforms due to sched_getcpu
returning an error.  But the current test only considers -1 when it's
also ENOSYS.  Tweak the logic a bit to make the output clearer.

Signed-off-by: Mike Frysinger <vapier@gentoo.org>
2012-06-04 22:22:02 -04:00

60 lines
1.0 KiB
C

#include <errno.h>
#include <stdio.h>
#include <sched.h>
#include <unistd.h>
static int
do_test (void)
{
cpu_set_t cs;
if (sched_getaffinity (getpid (), sizeof (cs), &cs) != 0)
{
printf ("getaffinity failed: %m\n");
return 1;
}
int result = 0;
int cpu = 0;
while (CPU_COUNT (&cs) != 0)
{
if (CPU_ISSET (cpu, &cs))
{
cpu_set_t cs2;
CPU_ZERO (&cs2);
CPU_SET (cpu, &cs2);
if (sched_setaffinity (getpid (), sizeof (cs2), &cs2) != 0)
{
printf ("setaffinity(%d) failed: %m\n", cpu);
result = 1;
}
else
{
int cpu2 = sched_getcpu ();
if (cpu2 == -1)
{
if (errno == ENOSYS)
{
puts ("getcpu syscall not implemented");
return 0;
}
perror ("getcpu failed");
result = 1;
}
if (cpu2 != cpu)
{
printf ("getcpu results %d not possible\n", cpu2);
result = 1;
}
}
CPU_CLR (cpu, &cs);
}
++cpu;
}
return result;
}
#define TEST_FUNCTION do_test ()
#include <test-skeleton.c>