diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-05-11 06:39:07 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-05-11 06:39:07 +0000 |
commit | 341c566f05fa6b19b88508f7ddd835bfd101731b (patch) | |
tree | 82fc68ed7d11fb8ea2b5c7f7d8f38c2c554734c7 /sysdeps/unix | |
parent | a53fa282ac5200d5ca345a34f2a257dfe5ed2d4b (diff) | |
download | glibc-341c566f05fa6b19b88508f7ddd835bfd101731b.tar.gz glibc-341c566f05fa6b19b88508f7ddd835bfd101731b.tar.xz glibc-341c566f05fa6b19b88508f7ddd835bfd101731b.zip |
* sysdeps/unix/sysv/linux/tst-getcpu.c: New file.
* sysdeps/unix/sysv/linux/Makefile [subdir=posix] (tests): Add tst-getcpu. * include/link.h: Move l_version and l_nversion members around to fill gaps.
Diffstat (limited to 'sysdeps/unix')
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/tst-getcpu.c | 53 |
2 files changed, 55 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 78553b9795..a063b33389 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -113,6 +113,8 @@ ifeq ($(subdir),posix) sysdep_headers += bits/initspin.h sysdep_routines += exit-thread sched_getcpu + +tests += tst-getcpu endif ifeq ($(subdir),inet) diff --git a/sysdeps/unix/sysv/linux/tst-getcpu.c b/sysdeps/unix/sysv/linux/tst-getcpu.c new file mode 100644 index 0000000000..78c4a6919e --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-getcpu.c @@ -0,0 +1,53 @@ +#include <errno.h> +#include <stdio.h> +#include <sched.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 && errno == ENOSYS) + { + puts ("getcpu syscall not implemented"); + return 0; + } + 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> |