From 972e719e8154eec5f543b027e2a08dfa285d55d5 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 8 Aug 2002 07:53:36 +0000 Subject: [PATCH] Update. 2002-05-24 Robert Love * posix/Makefile (routines): Add sched_getaffinity and sched_setaffinity. * posix/sched.h: Add declarations for sched_getaffinity and sched_setaffinity. * sysdeps/generic/sched_getaffinity.c: New file. * sysdeps/generic/sched_setaffinity.c: New file. * sysdeps/unix/sysv/linux/syscalls.list: Add sched_getaffinity and sched_setaffinity. 2002-08-06 Andreas Schwab * sysdeps/unix/utime.c: If TIMES is NULL pass it through to utimes. --- ChangeLog | 15 ++++++++++++ posix/Makefile | 2 +- posix/sched.h | 13 +++++++++- sysdeps/generic/sched_getaffinity.c | 35 +++++++++++++++++++++++++++ sysdeps/generic/sched_setaffinity.c | 35 +++++++++++++++++++++++++++ sysdeps/unix/sysv/linux/syscalls.list | 2 ++ sysdeps/unix/utime.c | 14 +++++------ 7 files changed, 106 insertions(+), 10 deletions(-) create mode 100644 sysdeps/generic/sched_getaffinity.c create mode 100644 sysdeps/generic/sched_setaffinity.c diff --git a/ChangeLog b/ChangeLog index 06815af3d7..35bee5e5aa 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2002-05-24 Robert Love + + * posix/Makefile (routines): Add sched_getaffinity and + sched_setaffinity. + * posix/sched.h: Add declarations for sched_getaffinity and + sched_setaffinity. + * sysdeps/generic/sched_getaffinity.c: New file. + * sysdeps/generic/sched_setaffinity.c: New file. + * sysdeps/unix/sysv/linux/syscalls.list: Add sched_getaffinity and + sched_setaffinity. + +2002-08-06 Andreas Schwab + + * sysdeps/unix/utime.c: If TIMES is NULL pass it through to utimes. + 2002-08-07 Ulrich Drepper * elf/dl-load.c (_dl_map_object_from_fd): Add missing \n in error diff --git a/posix/Makefile b/posix/Makefile index e9a46c2cf4..d6b2eb3c57 100644 --- a/posix/Makefile +++ b/posix/Makefile @@ -51,7 +51,7 @@ routines := \ confstr \ getopt getopt1 getopt_init \ sched_setp sched_getp sched_sets sched_gets sched_yield sched_primax \ - sched_primin sched_rr_gi \ + sched_primin sched_rr_gi sched_getaffinity sched_setaffinity \ getaddrinfo gai_strerror wordexp \ pread pwrite pread64 pwrite64 \ spawn_faction_init spawn_faction_destroy spawn_faction_addclose \ diff --git a/posix/sched.h b/posix/sched.h index e476928be2..fe38c10974 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 Free Software Foundation, Inc. + Copyright (C) 1996, 1997, 1999, 2001, 2002 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 @@ -62,6 +62,17 @@ extern int sched_get_priority_min (int __algorithm) __THROW; /* Get the SCHED_RR interval for the named process. */ extern int sched_rr_get_interval (__pid_t __pid, struct timespec *__t) __THROW; + +#ifdef __USE_GNU +/* Set the CPU affinity for a task */ +extern int sched_setaffinity (__pid_t __pid, unsigned long int __len, + unsigned long int *__mask) __THROW; + +/* Get the CPU affinity for a task */ +extern int sched_getaffinity (__pid_t __pid, unsigned long int __len, + unsigned long int *__mask) __THROW; +#endif + __END_DECLS #endif /* sched.h */ diff --git a/sysdeps/generic/sched_getaffinity.c b/sysdeps/generic/sched_getaffinity.c new file mode 100644 index 0000000000..fc3f48f9a3 --- /dev/null +++ b/sysdeps/generic/sched_getaffinity.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2002 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 +#include + + +/* Retrieve the CPU affinity mask for a particular process. */ +int +sched_getaffinity (pid, len, mask) + pid_t pid; + unsigned long int len; + unsigned long int *mask; +{ + __set_errno (ENOSYS); + return -1; +} +stub_warning (sched_getaffinity) +#include diff --git a/sysdeps/generic/sched_setaffinity.c b/sysdeps/generic/sched_setaffinity.c new file mode 100644 index 0000000000..0f80184095 --- /dev/null +++ b/sysdeps/generic/sched_setaffinity.c @@ -0,0 +1,35 @@ +/* Copyright (C) 2002 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 +#include + + +/* Retrieve the CPU affinity mask for a particular process. */ +int +sched_setaffinity (pid, len, mask) + pid_t pid; + unsigned long int len; + unsigned long int *mask; +{ + __set_errno (ENOSYS); + return -1; +} +stub_warning (sched_setaffinity) +#include diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index 8f7bfa32b2..8052fc05ec 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -39,11 +39,13 @@ pivot_root EXTRA pivot_root i:ss pivot_root prctl EXTRA prctl i:iiiii prctl query_module EXTRA query_module i:sipip query_module quotactl EXTRA quotactl i:isip quotactl +sched_getaffinity - sched_getaffinity i:iip sched_getaffinity sched_getp - sched_getparam i:ip __sched_getparam sched_getparam sched_gets - sched_getscheduler i:i __sched_getscheduler sched_getscheduler sched_primax - sched_get_priority_max i:i __sched_get_priority_max sched_get_priority_max sched_primin - sched_get_priority_min i:i __sched_get_priority_min sched_get_priority_min sched_rr_gi - sched_rr_get_interval i:ip __sched_rr_get_interval sched_rr_get_interval +sched_setaffinity - sched_setaffinity i:iip sched_setaffinity sched_setp - sched_setparam i:ip __sched_setparam sched_setparam sched_sets - sched_setscheduler i:iip __sched_setscheduler sched_setscheduler sched_yield - sched_yield i: __sched_yield sched_yield diff --git a/sysdeps/unix/utime.c b/sysdeps/unix/utime.c index cbfc351337..4a1815b2c7 100644 --- a/sysdeps/unix/utime.c +++ b/sysdeps/unix/utime.c @@ -32,21 +32,19 @@ utime (file, times) const struct utimbuf *times; { struct timeval timevals[2]; + struct timeval *tvp; if (times != NULL) { - timevals[0].tv_sec = (long int) times->actime; + timevals[0].tv_sec = (time_t) times->actime; timevals[0].tv_usec = 0L; - timevals[1].tv_sec = (long int) times->modtime; + timevals[1].tv_sec = (time_t) times->modtime; timevals[1].tv_usec = 0L; + tvp = timevals; } else - { - if (__gettimeofday (&timevals[0], NULL) < 0) - return -1; - timevals[1] = timevals[0]; - } + tvp = NULL; - return __utimes (file, timevals); + return __utimes (file, tvp); } libc_hidden_def (utime)