summaryrefslogtreecommitdiff
path: root/libcilkrts
diff options
context:
space:
mode:
authorbviyer <bviyer@138bc75d-0d04-0410-961f-82ee72b054a4>2014-01-20 17:49:22 +0000
committerbviyer <bviyer@138bc75d-0d04-0410-961f-82ee72b054a4>2014-01-20 17:49:22 +0000
commit9d5dde5d7b5d489564fed3a3017b243b0e1bfbf4 (patch)
treeeb5a127638b9e145246c0b66ed3d8260ff8064dd /libcilkrts
parent33a9ec1309cf9e4c8b64f289acf509c81d5bb3f8 (diff)
downloadlinaro-gcc-9d5dde5d7b5d489564fed3a3017b243b0e1bfbf4.tar.gz
linaro-gcc-9d5dde5d7b5d489564fed3a3017b243b0e1bfbf4.tar.bz2
linaro-gcc-9d5dde5d7b5d489564fed3a3017b243b0e1bfbf4.zip
Fix for PR other/58996.
+2014-01-20 Balaji V. Iyer <balaji.v.iyer@intel.com> + + PR other/58996 + * configure.ac: Added a check for pthread affinity support. + * runtime/os-unix.c: Likewise. + * configure: Regenerate. + git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@206846 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libcilkrts')
-rw-r--r--libcilkrts/ChangeLog7
-rw-r--r--libcilkrts/configure32
-rw-r--r--libcilkrts/configure.ac20
-rw-r--r--libcilkrts/runtime/os-unix.c5
4 files changed, 64 insertions, 0 deletions
diff --git a/libcilkrts/ChangeLog b/libcilkrts/ChangeLog
index 5ac0e4863db..b564ef07d6c 100644
--- a/libcilkrts/ChangeLog
+++ b/libcilkrts/ChangeLog
@@ -1,3 +1,10 @@
+2014-01-20 Balaji V. Iyer <balaji.v.iyer@intel.com>
+
+ PR other/58996
+ * configure.ac: Added a check for pthread affinity support.
+ * runtime/os-unix.c: Likewise.
+ * configure: Regenerate.
+
2014-01-09 Balaji V. Iyer <balaji.v.iyer@intel.com>
bootstrap/59094
diff --git a/libcilkrts/configure b/libcilkrts/configure
index 91da0a83a2c..63181d78ba5 100644
--- a/libcilkrts/configure
+++ b/libcilkrts/configure
@@ -14420,6 +14420,38 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+# Check for pthread_{,attr_}[sg]etaffinity_np.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+#define _GNU_SOURCE
+ #include <pthread.h>
+int
+main ()
+{
+cpu_set_t cpuset;
+ pthread_attr_t attr;
+ pthread_getaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
+ if (CPU_ISSET (0, &cpuset))
+ CPU_SET (1, &cpuset);
+ else
+ CPU_ZERO (&cpuset);
+ pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
+ pthread_attr_init (&attr);
+ pthread_attr_getaffinity_np (&attr, sizeof (cpu_set_t), &cpuset);
+ pthread_attr_setaffinity_np (&attr, sizeof (cpu_set_t), &cpuset);
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+$as_echo "#define HAVE_PTHREAD_AFFINITY_NP 1" >>confdefs.h
+
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+
# Must be last
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
diff --git a/libcilkrts/configure.ac b/libcilkrts/configure.ac
index 30fac992172..61b45b00723 100644
--- a/libcilkrts/configure.ac
+++ b/libcilkrts/configure.ac
@@ -164,5 +164,25 @@ AC_SUBST(toolexeclibdir)
AC_SUBST(lt_cv_dlopen_libs)
+# Check for pthread_{,attr_}[sg]etaffinity_np.
+AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM(
+ [#define _GNU_SOURCE
+ #include <pthread.h>],
+ [cpu_set_t cpuset;
+ pthread_attr_t attr;
+ pthread_getaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
+ if (CPU_ISSET (0, &cpuset))
+ CPU_SET (1, &cpuset);
+ else
+ CPU_ZERO (&cpuset);
+ pthread_setaffinity_np (pthread_self (), sizeof (cpu_set_t), &cpuset);
+ pthread_attr_init (&attr);
+ pthread_attr_getaffinity_np (&attr, sizeof (cpu_set_t), &cpuset);
+ pthread_attr_setaffinity_np (&attr, sizeof (cpu_set_t), &cpuset);])],
+ AC_DEFINE(HAVE_PTHREAD_AFFINITY_NP, 1,
+[ Define if pthread_{,attr_}{g,s}etaffinity_np is supported.]))
+
+
# Must be last
AC_OUTPUT
diff --git a/libcilkrts/runtime/os-unix.c b/libcilkrts/runtime/os-unix.c
index dbca21f6f3c..fafb91d91a1 100644
--- a/libcilkrts/runtime/os-unix.c
+++ b/libcilkrts/runtime/os-unix.c
@@ -311,6 +311,10 @@ static pid_t linux_gettid(void)
*/
static int linux_get_affinity_count (int tid)
{
+#if !defined HAVE_PTHREAD_AFFINITY_NP
+ return 0;
+#else
+
cpu_set_t process_mask;
// Extract the thread affinity mask
@@ -337,6 +341,7 @@ static int linux_get_affinity_count (int tid)
}
return available_procs;
+#endif
}
#endif