fixed Win32 build
[libfirm] / ir / stat / stat_timing.c
1
2 #include <stdio.h>
3 #include "stat_timing.h"
4
5 /* we can only use the scheduling stuff, if that macro is defined in unistd.h */
6 #if defined(_XOPEN_REALTIME) && _XOPEN_REALTIME != -1
7
8 timing_sched_env_t *timing_sched_get(timing_sched_env_t *env)
9 {
10         int res;
11
12 #ifdef __linux__
13         res = sched_getaffinity(0, sizeof(env->affinity), &env->affinity);
14         if (res < 0)
15                 return NULL;
16 #endif
17
18         env->scheduler = sched_getscheduler(0);
19         if (env->scheduler < 0)
20                 return NULL;
21
22         res = sched_getparam(0, &env->params);
23         if (res < 0)
24                 return NULL;
25
26         return env;
27 }
28
29 int timing_sched_set(const timing_sched_env_t *env)
30 {
31         int res;
32
33 #ifdef __linux__
34         res = sched_setaffinity(0, sizeof(env->affinity), &env->affinity);
35         if (res < 0)
36                 return 0;
37 #endif
38
39         res = sched_setscheduler(0, env->scheduler, &env->params);
40         if (res < 0)
41                 return 0;
42
43         return 1;
44 }
45
46 timing_sched_env_t *timing_sched_prepare_max_prio(timing_sched_env_t *env)
47 {
48         int policy = SCHED_FIFO;
49 #ifdef __linux__
50         CPU_ZERO(&env->affinity);
51         CPU_SET(0, &env->affinity);
52 #endif
53         env->scheduler             = policy;
54         env->params.sched_priority = sched_get_priority_max(policy);
55         return env;
56 }
57
58 #else
59
60 timing_sched_env_t *timing_sched_get(timing_sched_env_t *env)
61 {
62         return NULL;
63 }
64
65 int timing_sched_set(const timing_sched_env_t *env)
66 {
67         return 0;
68 }
69
70 timing_sched_env_t *timing_sched_prepare_max_prio(timing_sched_env_t *env)
71 {
72         return env;
73 }
74
75 #endif /* _POSIX_PRIORITY_SCHEDULING */