summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--posix/Makefile2
-rw-r--r--posix/sched.h13
-rw-r--r--sysdeps/generic/sched_getaffinity.c35
-rw-r--r--sysdeps/generic/sched_setaffinity.c35
-rw-r--r--sysdeps/unix/sysv/linux/syscalls.list2
-rw-r--r--sysdeps/unix/utime.c14
7 files changed, 106 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 06815af3d7..35bee5e5aa 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2002-05-24  Robert Love  <rml@tech9.net>
+
+	* 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  <schwab@suse.de>
+
+	* sysdeps/unix/utime.c: If TIMES is NULL pass it through to utimes.
+
 2002-08-07  Ulrich Drepper  <drepper@redhat.com>
 
 	* 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 <errno.h>
+#include <sys/types.h>
+#include <sched.h>
+
+
+/* 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 <stub-tag.h>
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 <errno.h>
+#include <sys/types.h>
+#include <sched.h>
+
+
+/* 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 <stub-tag.h>
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)