aboutsummaryrefslogtreecommitdiffstats
path: root/src/adaptive.c
blob: ebf662dd59f7147540a4aeae944ffbf1ada83b25 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <sys/types.h>
#include <unistd.h>

#include "litmus.h"
#include "adaptive.h"

#define __NR_set_service_levels 	346
#define __NR_get_cur_service_level 	347



int set_service_levels(pid_t pid, 
		       unsigned int nr_levels,
		       service_level_t* levels)
{
	return syscall(__NR_set_service_levels, pid, nr_levels, levels);
}


int get_cur_service_level(void)
{
	return syscall(__NR_get_cur_service_level);
}


struct adaptive_param {
	unsigned int 		no_levels;
	service_level_t* 	levels;
};

int setup_adaptive(int pid, struct adaptive_param* arg)
{
	return set_service_levels(pid, arg->no_levels, arg->levels);
}

int create_adaptive_rt_task(rt_fn_t rt_prog, void *arg, 
			    unsigned int no_levels, service_level_t* levels) 
{
	struct adaptive_param p;
	p.no_levels = no_levels;
	p.levels    = levels;
	return __launch_rt_task(rt_prog, arg,
				(rt_setup_fn_t) setup_adaptive, &p);
}