summaryrefslogtreecommitdiff
path: root/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
diff options
context:
space:
mode:
Diffstat (limited to 'libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c')
-rw-r--r--libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c b/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
index d28b6f2f3..467e8ec70 100644
--- a/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
+++ b/libpthread/nptl/sysdeps/unix/sysv/linux/pthread_setaffinity.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2006, 2007 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@redhat.com>, 2003.
@@ -24,7 +24,7 @@
#include <sys/types.h>
-size_t __kernel_cpumask_size;
+size_t __kernel_cpumask_size attribute_hidden;
/* Determine the current affinity. As a side affect we learn
@@ -71,8 +71,7 @@ pthread_setaffinity_np (pthread_t th, size_t cpusetsize,
/* We now know the size of the kernel cpumask_t. Make sure the user
does not request to set a bit beyond that. */
- size_t cnt;
- for (cnt = __kernel_cpumask_size; cnt < cpusetsize; ++cnt)
+ for (size_t cnt = __kernel_cpumask_size; cnt < cpusetsize; ++cnt)
if (((char *) cpuset)[cnt] != '\0')
/* Found a nonzero byte. This means the user request cannot be
fulfilled. */
@@ -80,6 +79,12 @@ pthread_setaffinity_np (pthread_t th, size_t cpusetsize,
res = INTERNAL_SYSCALL (sched_setaffinity, err, 3, pd->tid, cpusetsize,
cpuset);
+
+#ifdef RESET_VGETCPU_CACHE
+ if (!INTERNAL_SYSCALL_ERROR_P (res, err))
+ RESET_VGETCPU_CACHE ();
+#endif
+
return (INTERNAL_SYSCALL_ERROR_P (res, err)
? INTERNAL_SYSCALL_ERRNO (res, err)
: 0);