Merging upstream version 0.7.2.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
44a755f8ce
commit
6df1da3298
33 changed files with 913 additions and 181 deletions
|
@ -34,16 +34,24 @@
|
|||
#include <stdlib.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
#ifdef __linux__
|
||||
#if defined(__linux__) || defined(__DragonFly__)
|
||||
#include <sched.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/syscall.h>
|
||||
#if defined(__DragonFly__)
|
||||
#include <sys/sched.h>
|
||||
#include <pthread_np.h>
|
||||
#endif
|
||||
#elif defined(__MACH__)
|
||||
#include <errno.h>
|
||||
#include <mach/mach.h>
|
||||
#include <mach/thread_policy.h>
|
||||
#elif defined(__FreeBSD__)
|
||||
#include <sys/param.h>
|
||||
#include <sys/cpuset.h>
|
||||
#elif defined(__NetBSD__)
|
||||
#include <pthread.h>
|
||||
#include <sched.h>
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32)
|
||||
|
@ -266,11 +274,15 @@ struct affinity {
|
|||
|
||||
#define AFFINITY_INITIALIZER {0, 0}
|
||||
|
||||
#ifdef __linux__
|
||||
#if defined(__linux__) || defined(__DragonFly__)
|
||||
static pid_t
|
||||
common_gettid(void)
|
||||
{
|
||||
#if defined(__linux__)
|
||||
return syscall(__NR_gettid);
|
||||
#else
|
||||
return pthread_getthreadid_np();
|
||||
#endif
|
||||
}
|
||||
|
||||
CK_CC_UNUSED static int
|
||||
|
@ -309,13 +321,19 @@ aff_iterate(struct affinity *acb)
|
|||
{
|
||||
thread_affinity_policy_data_t policy;
|
||||
unsigned int c;
|
||||
int err;
|
||||
|
||||
c = ck_pr_faa_uint(&acb->request, acb->delta) % CORES;
|
||||
policy.affinity_tag = c;
|
||||
return thread_policy_set(mach_thread_self(),
|
||||
err = thread_policy_set(mach_thread_self(),
|
||||
THREAD_AFFINITY_POLICY,
|
||||
(thread_policy_t)&policy,
|
||||
THREAD_AFFINITY_POLICY_COUNT);
|
||||
if (err == KERN_NOT_SUPPORTED)
|
||||
return 0;
|
||||
if (err != 0)
|
||||
errno = EINVAL;
|
||||
return err;
|
||||
}
|
||||
|
||||
CK_CC_UNUSED static int
|
||||
|
@ -355,6 +373,39 @@ aff_iterate_core(struct affinity *acb CK_CC_UNUSED, unsigned int *core)
|
|||
return (cpuset_setaffinity(CPU_LEVEL_WHICH, CPU_WHICH_TID, -1,
|
||||
sizeof(mask), &mask));
|
||||
}
|
||||
#elif defined(__NetBSD__)
|
||||
CK_CC_UNUSED static int
|
||||
aff_iterate(struct affinity *acb CK_CC_UNUSED)
|
||||
{
|
||||
unsigned int c;
|
||||
cpuset_t *mask;
|
||||
|
||||
c = ck_pr_faa_uint(&acb->request, acb->delta) % CORES;
|
||||
mask = cpuset_create();
|
||||
if (!mask)
|
||||
return -1;
|
||||
cpuset_zero(mask);
|
||||
cpuset_set(c, mask);
|
||||
int ret = pthread_setaffinity_np(pthread_self(), cpuset_size(mask), mask);
|
||||
cpuset_destroy(mask);
|
||||
return ret;
|
||||
}
|
||||
|
||||
CK_CC_UNUSED static int
|
||||
aff_iterate_core(struct affinity *acb CK_CC_UNUSED, unsigned int *core)
|
||||
{
|
||||
cpuset_t *mask;
|
||||
|
||||
*core = ck_pr_faa_uint(&acb->request, acb->delta) % CORES;
|
||||
mask = cpuset_create();
|
||||
if (!mask)
|
||||
return -1;
|
||||
cpuset_zero(mask);
|
||||
cpuset_set(*core, mask);
|
||||
int ret = pthread_setaffinity_np(pthread_self(), cpuset_size(mask), mask);
|
||||
cpuset_destroy(mask);
|
||||
return ret;
|
||||
}
|
||||
#else
|
||||
CK_CC_UNUSED static int
|
||||
aff_iterate(struct affinity *acb CK_CC_UNUSED)
|
||||
|
@ -451,6 +502,11 @@ rdtsc(void)
|
|||
|
||||
__asm __volatile__ ("mrs %0, cntvct_el0" : "=r" (r) : : "memory");
|
||||
return r;
|
||||
#elif defined(__riscv) && __riscv_xlen == 64
|
||||
uint64_t r;
|
||||
|
||||
__asm __volatile__("rdtime %0" : "=r" (r) :: "memory");
|
||||
return r;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue