diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | bits/sched.h | 5 | ||||
-rw-r--r-- | posix/sched.h | 13 | ||||
-rw-r--r-- | posix/sched_cpucount.c | 4 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/sched.h | 6 |
5 files changed, 21 insertions, 10 deletions
@@ -5,6 +5,9 @@ * posix/sched_cpucount.c: New file. * posix/tst-cpucount.c: New file. * posix/Versions: Export __sched_cpucount with version GLIBC_2.6. + * bits/sched.h: Define __CPU_COUNT. Declare __sched_cpucount. + * sysdeps/unix/sysv/linux/bits/sched.h: Likewise. + * posix/sched.h: Define CPU_COUNT. 2007-03-27 Jakub Jelinek <jakub@redhat.com> diff --git a/bits/sched.h b/bits/sched.h index 91b6dca0ca..32434a3798 100644 --- a/bits/sched.h +++ b/bits/sched.h @@ -1,6 +1,6 @@ /* Definitions of constants and data structure for POSIX 1003.1b-1993 scheduling interface. - Copyright (C) 1996, 1997, 2001, 2003 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 2001, 2003, 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 @@ -68,4 +68,7 @@ typedef struct ((cpusetp)->__bits[__CPUELT (cpu)] &= ~__CPUMASK (cpu)) # define __CPU_ISSET(cpu, cpusetp) \ (((cpusetp)->__bits[__CPUELT (cpu)] & __CPUMASK (cpu)) != 0) +extern int __sched_cpucount (size_t __setsize, cpu_set_t *__setp) __THROW; +# define __CPU_COUNT(cpusetp) \ + __sched_cpucount (sizeof (cpu_set_t), cpusetp) #endif diff --git a/posix/sched.h b/posix/sched.h index 7cfdbf1f96..becad0f365 100644 --- a/posix/sched.h +++ b/posix/sched.h @@ -1,5 +1,5 @@ /* Definitions for POSIX 1003.1b-1993 (aka POSIX.4) scheduling interface. - Copyright (C) 1996,1997,1999,2001-2003,2004 Free Software Foundation, Inc. + Copyright (C) 1996,1997,1999,2001-2004,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 @@ -65,11 +65,12 @@ extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW; #ifdef __USE_GNU /* Access macros for `cpu_set'. */ -#define CPU_SETSIZE __CPU_SETSIZE -#define CPU_SET(cpu, cpusetp) __CPU_SET (cpu, cpusetp) -#define CPU_CLR(cpu, cpusetp) __CPU_CLR (cpu, cpusetp) -#define CPU_ISSET(cpu, cpusetp) __CPU_ISSET (cpu, cpusetp) -#define CPU_ZERO(cpusetp) __CPU_ZERO (cpusetp) +# define CPU_SETSIZE __CPU_SETSIZE +# define CPU_SET(cpu, cpusetp) __CPU_SET (cpu, cpusetp) +# define CPU_CLR(cpu, cpusetp) __CPU_CLR (cpu, cpusetp) +# define CPU_ISSET(cpu, cpusetp) __CPU_ISSET (cpu, cpusetp) +# define CPU_ZERO(cpusetp) __CPU_ZERO (cpusetp) +# define CPU_COUNT(cpusetp) __CPU_COUNT (cpusetp) /* Set the CPU affinity for a task */ diff --git a/posix/sched_cpucount.c b/posix/sched_cpucount.c index 8404e8f3c0..d7f6b7b49f 100644 --- a/posix/sched_cpucount.c +++ b/posix/sched_cpucount.c @@ -21,10 +21,10 @@ int -__sched_cpucount (cpu_set_t *setp) +__sched_cpucount (size_t setsize, cpu_set_t *setp) { int s = 0; - for (unsigned int j = 0; j < __CPU_SETSIZE / __NCPUBITS; ++j) + for (unsigned int j = 0; j < setsize / sizeof (__cpu_mask); ++j) { __cpu_mask l = setp->__bits[j]; if (l == 0) diff --git a/sysdeps/unix/sysv/linux/bits/sched.h b/sysdeps/unix/sysv/linux/bits/sched.h index 4a95a263f7..1d9c7b9f35 100644 --- a/sysdeps/unix/sysv/linux/bits/sched.h +++ b/sysdeps/unix/sysv/linux/bits/sched.h @@ -1,6 +1,7 @@ /* Definitions of constants and data structure for POSIX 1003.1b-1993 scheduling interface. - Copyright (C) 1996-1999,2001-2003,2005,2006 Free Software Foundation, Inc. + Copyright (C) 1996-1999,2001-2003,2005,2006,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 @@ -127,4 +128,7 @@ typedef struct ((cpusetp)->__bits[__CPUELT (cpu)] &= ~__CPUMASK (cpu)) # define __CPU_ISSET(cpu, cpusetp) \ (((cpusetp)->__bits[__CPUELT (cpu)] & __CPUMASK (cpu)) != 0) +extern int __sched_cpucount (size_t __setsize, cpu_set_t *__setp) __THROW; +# define __CPU_COUNT(cpusetp) \ + __sched_cpucount (sizeof (cpu_set_t), cpusetp) #endif |