diff options
author | Ulrich Drepper <drepper@redhat.com> | 2007-07-29 22:24:44 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2007-07-29 22:24:44 +0000 |
commit | 44f08a6ecc9d04fbb97475ebb99eaec26be36f90 (patch) | |
tree | dc7a2b43f2ac6b598e8c5095ae8622d1886246d7 /posix | |
parent | a14ad5ae4b0e9272877ad6e7cb97792632da94a8 (diff) | |
download | glibc-44f08a6ecc9d04fbb97475ebb99eaec26be36f90.tar.gz glibc-44f08a6ecc9d04fbb97475ebb99eaec26be36f90.tar.xz glibc-44f08a6ecc9d04fbb97475ebb99eaec26be36f90.zip |
* 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/Makefile | 4 | ||||
-rw-r--r-- | posix/Versions | 3 | ||||
-rw-r--r-- | posix/sched_cpualloc.c | 27 | ||||
-rw-r--r-- | posix/sched_cpufree.c | 27 | ||||
-rw-r--r-- | posix/tst-cpuset.c | 82 |
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" |