From 44f08a6ecc9d04fbb97475ebb99eaec26be36f90 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 29 Jul 2007 22:24:44 +0000 Subject: * 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. --- posix/Makefile | 4 +-- posix/Versions | 3 ++ posix/sched_cpualloc.c | 27 +++++++++++++++++ posix/sched_cpufree.c | 27 +++++++++++++++++ posix/tst-cpuset.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 posix/sched_cpualloc.c create mode 100644 posix/sched_cpufree.c create mode 100644 posix/tst-cpuset.c (limited to 'posix') diff --git a/posix/Makefile b/posix/Makefile index 010ab2d..1a1d2bc 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 1e1bda8..f73ff4a 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 0000000..2642a80 --- /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 +#include + + +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 0000000..dd4c613 --- /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 +#include + + +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 0000000..d736793 --- /dev/null +++ b/posix/tst-cpuset.c @@ -0,0 +1,82 @@ +#include +#include + +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" -- cgit v1.1