$NetBSD: patch-ad,v 1.2 2012/03/07 16:27:35 adam Exp $ --- src/OpenThreads/pthreads/PThread.cpp.orig 2011-06-23 20:09:26.000000000 +0000 +++ src/OpenThreads/pthreads/PThread.cpp @@ -135,6 +135,15 @@ private: { #if defined(__sgi) pthread_setrunon_np( pd->cpunum ); +#elif defined(__NetBSD__) && defined(HAVE_PTHREAD_SETAFFINITY_NP) + cpuset_t *cset; + cset = cpuset_create(); + if (cset != NULL) + { + cpuset_set(pd->cpunum, cset); + pthread_setaffinity_np(pthread_self(), cpuset_size(cset), cset); + cpuset_destroy(cset); + } #elif defined(HAVE_PTHREAD_SETAFFINITY_NP) || defined(HAVE_THREE_PARAM_SCHED_SETAFFINITY) || defined(HAVE_TWO_PARAM_SCHED_SETAFFINITY) cpu_set_t cpumask; CPU_ZERO( &cpumask ); @@ -565,6 +574,18 @@ int Thread::setProcessorAffinity(unsigne status = pthread_attr_setscope( &thread_attr, PTHREAD_SCOPE_BOUND_NP ); return status; +#elif defined(__NetBSD__) && defined(HAVE_PTHREAD_SETAFFINITY_NP) + if (pd->isRunning && Thread::CurrentThread()==this) + { + cpuset_t *cset; + cset = cpuset_create(); + if (cset != NULL) + { + cpuset_set(pd->cpunum, cset); + pthread_setaffinity_np(pthread_self(), cpuset_size(cset), cset); + cpuset_destroy(cset); + } + } #elif defined(HAVE_PTHREAD_SETAFFINITY_NP) || defined(HAVE_THREE_PARAM_SCHED_SETAFFINITY) || defined(HAVE_TWO_PARAM_SCHED_SETAFFINITY) if (pd->isRunning && Thread::CurrentThread()==this) @@ -1030,7 +1051,16 @@ int OpenThreads::SetProcessorAffinityOfC } else { -#if defined(HAVE_PTHREAD_SETAFFINITY_NP) || defined(HAVE_THREE_PARAM_SCHED_SETAFFINITY) || defined(HAVE_TWO_PARAM_SCHED_SETAFFINITY) +#if defined(__NetBSD__) && defined(HAVE_PTHREAD_SETAFFINITY_NP) + cpuset_t *cset; + cset = cpuset_create(); + if (cset != NULL) + { + cpuset_set(cpunum, cset); + pthread_setaffinity_np(pthread_self(), cpuset_size(cset), cset); + cpuset_destroy(cset); + } +#elif defined(HAVE_PTHREAD_SETAFFINITY_NP) || defined(HAVE_THREE_PARAM_SCHED_SETAFFINITY) || defined(HAVE_TWO_PARAM_SCHED_SETAFFINITY) cpu_set_t cpumask; CPU_ZERO( &cpumask ); CPU_SET( cpunum, &cpumask );