changes.
[IRC.git] / Robust / src / Runtime / affinity.c
1 #include <stdio.h>
2 #include <pthread.h>
3 #include <sys/syscall.h>
4 #include <unistd.h>
5 #include <errno.h>
6 #include <sched.h>
7 #include <stdarg.h>
8 #include <stdlib.h>
9 #include "runtime.h"
10 #include "mlp_lock.h"
11
12 static volatile unsigned int corecount=0;
13
14 void set_affinity() {
15   int err;
16   cpu_set_t cpumask;
17
18   CPU_ZERO(&cpumask);
19
20   int ourcount=atomicincandread(&corecount);
21   ourcount=ourcount&7;
22   int newvalue=ourcount>>1;
23   if (ourcount&1) {
24     newvalue=newvalue|4;
25   }
26
27   CPU_SET(newvalue, &cpumask);
28
29   err = sched_setaffinity(syscall(SYS_gettid), sizeof(cpu_set_t), &cpumask);
30
31   if (err == -1)
32     printf("set_affinity: %s\n", strerror(errno));
33 }