summaryrefslogtreecommitdiff
path: root/posix
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2007-07-29 22:24:44 +0000
committerUlrich Drepper <drepper@redhat.com>2007-07-29 22:24:44 +0000
commit44f08a6ecc9d04fbb97475ebb99eaec26be36f90 (patch)
treedc7a2b43f2ac6b598e8c5095ae8622d1886246d7 /posix
parenta14ad5ae4b0e9272877ad6e7cb97792632da94a8 (diff)
* posix/Makefile (routines): Add sched_cpualloc and sched_cpufree.
(tests): Add tst-cpuset. * posix/sched_cpualloc.c: New file. * posix/sched_cpufree.c: New file. * posix/tst-cpuset.c: New file. * posix/Versions: Export __sched_cpualloc and __sched_cpufree for GLIBC_2.7. * sysdeps/unix/sysv/linux/bits/sched.h: Define __CPU_*_S macros. * posix/sched.h: Define old CPU_* macros in temers of __CPU_*_S macros. Define CPU_*_S macros.
Diffstat (limited to 'posix')
-rw-r--r--posix/Makefile4
-rw-r--r--posix/Versions3
-rw-r--r--posix/sched_cpualloc.c27
-rw-r--r--posix/sched_cpufree.c27
-rw-r--r--posix/tst-cpuset.c82
5 files changed, 141 insertions, 2 deletions
diff --git a/posix/Makefile b/posix/Makefile
index 010ab2d3d0..1a1d2bc119 100644
--- a/posix/Makefile
+++ b/posix/Makefile
@@ -66,7 +66,7 @@ routines := \
spawnattr_getsigmask spawnattr_getschedpolicy spawnattr_getschedparam \
spawnattr_setsigmask spawnattr_setschedpolicy spawnattr_setschedparam \
posix_madvise \
- get_child_max sched_cpucount
+ get_child_max sched_cpucount sched_cpualloc sched_cpufree
include ../Makeconfig
@@ -90,7 +90,7 @@ tests := tstgetopt testfnm runtests runptests \
tst-execv1 tst-execv2 tst-execl1 tst-execl2 \
tst-execve1 tst-execve2 tst-execle1 tst-execle2 \
tst-execvp3 tst-execvp4 tst-rfc3484 tst-rfc3484-2 \
- tst-getaddrinfo3 tst-fnmatch2 tst-cpucount
+ tst-getaddrinfo3 tst-fnmatch2 tst-cpucount tst-cpuset
xtests := bug-ga2
ifeq (yes,$(build-shared))
test-srcs := globtest
diff --git a/posix/Versions b/posix/Versions
index 1e1bda8b7b..f73ff4a85a 100644
--- a/posix/Versions
+++ b/posix/Versions
@@ -125,6 +125,9 @@ libc {
GLIBC_2.6 {
__sched_cpucount;
}
+ GLIBC_2.7 {
+ __sched_cpualloc; __sched_cpufree;
+ }
GLIBC_PRIVATE {
__libc_fork; __libc_pwrite;
}
diff --git a/posix/sched_cpualloc.c b/posix/sched_cpualloc.c
new file mode 100644
index 0000000000..2642a80109
--- /dev/null
+++ b/posix/sched_cpualloc.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 2007 Free Software Foundation, Inc.
+ 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, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <sched.h>
+#include <stdlib.h>
+
+
+cpu_set_t *
+__sched_cpualloc (size_t count)
+{
+ return malloc (CPU_ALLOC_SIZE (count));
+}
diff --git a/posix/sched_cpufree.c b/posix/sched_cpufree.c
new file mode 100644
index 0000000000..dd4c6131d7
--- /dev/null
+++ b/posix/sched_cpufree.c
@@ -0,0 +1,27 @@
+/* Copyright (C) 2007 Free Software Foundation, Inc.
+ 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, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <sched.h>
+#include <stdlib.h>
+
+
+void
+__sched_cpufree (cpu_set_t *set)
+{
+ free (set);
+}
diff --git a/posix/tst-cpuset.c b/posix/tst-cpuset.c
new file mode 100644
index 0000000000..d736793222
--- /dev/null
+++ b/posix/tst-cpuset.c
@@ -0,0 +1,82 @@
+#include <sched.h>
+#include <stdio.h>
+
+static int
+do_test (void)
+{
+ int result = 0;
+
+ cpu_set_t s1;
+ cpu_set_t s2;
+ cpu_set_t s3;
+
+ CPU_ZERO (&s1);
+ CPU_SET (0, &s1);
+
+ CPU_ZERO (&s2);
+ CPU_SET (0, &s2);
+ CPU_SET (1, &s2);
+
+ CPU_AND (&s3, &s1, &s2);
+ if (! CPU_EQUAL (&s3, &s1))
+ {
+ puts ("result of CPU_AND wrong");
+ result = 1;
+ }
+
+ CPU_OR (&s3, &s1, &s2);
+ if (! CPU_EQUAL (&s3, &s2))
+ {
+ puts ("result of CPU_OR wrong");
+ result = 1;
+ }
+
+ CPU_XOR (&s3, &s1, &s2);
+ if (CPU_COUNT (&s3) != 1)
+ {
+ puts ("result of CPU_XOR wrong");
+ result = 1;
+ }
+
+ cpu_set_t *vs1 = CPU_ALLOC (2048);
+ cpu_set_t *vs2 = CPU_ALLOC (2048);
+ cpu_set_t *vs3 = CPU_ALLOC (2048);
+ size_t vssize = CPU_ALLOC_SIZE (2048);
+
+ CPU_ZERO_S (vssize, vs1);
+ CPU_SET_S (0, vssize, vs1);
+
+ CPU_ZERO_S (vssize, vs2);
+ CPU_SET_S (0, vssize, vs2);
+ CPU_SET_S (2047, vssize, vs2);
+
+ CPU_AND_S (vssize, vs3, vs1, vs2);
+ if (! CPU_EQUAL_S (vssize, vs3, vs1))
+ {
+ puts ("result of CPU_AND_S wrong");
+ result = 1;
+ }
+
+ CPU_OR_S (vssize, vs3, vs1, vs2);
+ if (! CPU_EQUAL_S (vssize, vs3, vs2))
+ {
+ puts ("result of CPU_OR_S wrong");
+ result = 1;
+ }
+
+ CPU_XOR_S (vssize, vs3, vs1, vs2);
+ if (CPU_COUNT_S (vssize, vs3) != 1)
+ {
+ puts ("result of CPU_XOR_S wrong");
+ result = 1;
+ }
+
+ CPU_FREE (vs1);
+ CPU_FREE (vs2);
+ CPU_FREE (vs3);
+
+ return result;
+}
+
+#define TEST_FUNCTION do_test ()
+#include "../test-skeleton.c"