diff options
| author | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-02-03 01:09:48 -0500 |
|---|---|---|
| committer | Bjoern B. Brandenburg <bbb@cs.unc.edu> | 2008-02-03 01:09:48 -0500 |
| commit | 2d507260ee723f8302c5c97a9bda1cf00f30ec99 (patch) | |
| tree | 033231fa56c53c67916cbc1f1a05d9560ef1d4ab /src | |
| parent | 526afdfb333ca29170fd210b08860ac2a4c141ed (diff) | |
many changes
- use declarations from kernel
- get rid of stuipd system call macros
Diffstat (limited to 'src')
| -rw-r--r-- | src/litmus.c | 8 | ||||
| -rw-r--r-- | src/syscalls.c | 126 | ||||
| -rw-r--r-- | src/task.c | 25 |
3 files changed, 88 insertions, 71 deletions
diff --git a/src/litmus.c b/src/litmus.c index 8f5dfe8..6503088 100644 --- a/src/litmus.c +++ b/src/litmus.c | |||
| @@ -8,10 +8,10 @@ | |||
| 8 | #include "litmus.h" | 8 | #include "litmus.h" |
| 9 | #include "internal.h" | 9 | #include "internal.h" |
| 10 | 10 | ||
| 11 | void show_rt_param(rt_param_t* tp) | 11 | void show_rt_param(struct rt_task* tp) |
| 12 | { | 12 | { |
| 13 | printf("rt params:\n\t" | 13 | printf("rt params:\n\t" |
| 14 | "exec_cost:\t%ld\n\tperiod:\t\t%ld\n\tcpu:\t%d\n", | 14 | "exec_cost:\t%llu\n\tperiod:\t\t%llu\n\tcpu:\t%d\n", |
| 15 | tp->exec_cost, tp->period, tp->cpu); | 15 | tp->exec_cost, tp->period, tp->cpu); |
| 16 | } | 16 | } |
| 17 | 17 | ||
| @@ -30,11 +30,11 @@ task_class_t str2class(const char* str) | |||
| 30 | int sporadic_task(unsigned long e, unsigned long p, | 30 | int sporadic_task(unsigned long e, unsigned long p, |
| 31 | int cpu, task_class_t cls) | 31 | int cpu, task_class_t cls) |
| 32 | { | 32 | { |
| 33 | rt_param_t param; | 33 | struct rt_task param; |
| 34 | param.exec_cost = e; | 34 | param.exec_cost = e; |
| 35 | param.period = p; | 35 | param.period = p; |
| 36 | param.cpu = cpu; | 36 | param.cpu = cpu; |
| 37 | param.cls = cls; | 37 | param.cls = cls; |
| 38 | return set_rt_task_param(gettid(), ¶m); | 38 | return set_rt_task_param(gettid(), ¶m); |
| 39 | } | 39 | } |
| 40 | 40 | ||
diff --git a/src/syscalls.c b/src/syscalls.c index 0924818..40f5f7f 100644 --- a/src/syscalls.c +++ b/src/syscalls.c | |||
| @@ -8,53 +8,87 @@ | |||
| 8 | 8 | ||
| 9 | #include "litmus.h" | 9 | #include "litmus.h" |
| 10 | 10 | ||
| 11 | #include "syscalls.h" | ||
| 12 | |||
| 13 | struct np_flag; | 11 | struct np_flag; |
| 14 | 12 | ||
| 15 | /* Litmus syscalls definitions */ | ||
| 16 | #define __NR_sched_setpolicy 320 | ||
| 17 | #define __NR_sched_getpolicy 321 | ||
| 18 | #define __NR_set_rt_mode 322 | ||
| 19 | #define __NR_set_rt_task_param 323 | ||
| 20 | #define __NR_get_rt_task_param 324 | ||
| 21 | #define __NR_sleep_next_period 326 | ||
| 22 | #define __NR_scheduler_setup 327 | ||
| 23 | #define __NR_register_np_flag 328 | ||
| 24 | #define __NR_signal_exit_np 329 | ||
| 25 | #define __NR_od_openx 330 | ||
| 26 | #define __NR_od_close 331 | ||
| 27 | #define __NR_pi_down 332 | ||
| 28 | #define __NR_pi_up 333 | ||
| 29 | #define __NR_srp_down 334 | ||
| 30 | #define __NR_srp_up 335 | ||
| 31 | #define __NR_reg_task_srp_sem 336 | ||
| 32 | #define __NR_get_job_no 337 | ||
| 33 | #define __NR_wait_for_job_release 338 | ||
| 34 | #define __NR_set_service_levels 339 | ||
| 35 | #define __NR_get_cur_service_level 340 | ||
| 36 | #define __NR_reg_ics_cb 341 | ||
| 37 | #define __NR_start_wcs 342 | ||
| 38 | #define __NR_task_mode 343 | ||
| 39 | |||
| 40 | /* Syscall stub for setting RT mode and scheduling options */ | 13 | /* Syscall stub for setting RT mode and scheduling options */ |
| 41 | 14 | ||
| 42 | _syscall0(pid_t, gettid); | 15 | pid_t gettid(void) |
| 43 | 16 | { | |
| 44 | _syscall2(int, set_rt_task_param, pid_t, pid, rt_param_t*, arg1); | 17 | return syscall(__NR_gettid); |
| 45 | _syscall2(int, get_rt_task_param, pid_t, pid, rt_param_t*, arg1); | 18 | } |
| 46 | _syscall0(int, sleep_next_period); | 19 | |
| 47 | _syscall1(int, register_np_flag, struct np_flag*, flag); | 20 | int set_rt_task_param(pid_t pid, struct rt_task *param) |
| 48 | _syscall0(int, signal_exit_np); | 21 | { |
| 49 | 22 | return syscall(__NR_set_rt_task_param, pid, param); | |
| 50 | _syscall4(int, od_openx, int, fd, obj_type_t, type, int, obj_id, | 23 | } |
| 51 | void*, config); | 24 | |
| 52 | _syscall1(int, od_close, int, od); | 25 | int get_rt_task_param(pid_t pid, struct rt_task *param) |
| 53 | _syscall1(int, pi_down, int, od); | 26 | { |
| 54 | _syscall1(int, pi_up, int, od); | 27 | return syscall(__NR_get_rt_task_param, pid, param); |
| 55 | _syscall1(int, srp_down, int, od); | 28 | } |
| 56 | _syscall1(int, srp_up, int, od); | 29 | |
| 57 | _syscall1(int, reg_task_srp_sem, int, od); | 30 | int sleep_next_period(void) |
| 58 | _syscall1(int, get_job_no, unsigned int*, job_no); | 31 | { |
| 59 | _syscall1(int, wait_for_job_release, unsigned int, job_no); | 32 | return syscall(__NR_sleep_next_period); |
| 60 | _syscall1(int, task_mode, int, target_mode); | 33 | } |
| 34 | |||
| 35 | int register_np_flag(struct np_flag *flag) | ||
| 36 | { | ||
| 37 | return syscall(__NR_register_np_flag, flag); | ||
| 38 | } | ||
| 39 | |||
| 40 | int signal_exit_np(void) | ||
| 41 | { | ||
| 42 | return syscall(__NR_exit_np); | ||
| 43 | } | ||
| 44 | |||
| 45 | int od_openx(int fd, obj_type_t type, int obj_id, void *config) | ||
| 46 | { | ||
| 47 | return syscall(__NR_od_open, fd, type, obj_id, config); | ||
| 48 | } | ||
| 49 | |||
| 50 | int od_close(int od) | ||
| 51 | { | ||
| 52 | return syscall(__NR_od_close, od); | ||
| 53 | } | ||
| 54 | |||
| 55 | int pi_down(int od) | ||
| 56 | { | ||
| 57 | return syscall(__NR_pi_down, od); | ||
| 58 | } | ||
| 59 | |||
| 60 | int pi_up(int od) | ||
| 61 | { | ||
| 62 | return syscall(__NR_pi_up, od); | ||
| 63 | } | ||
| 64 | |||
| 65 | int srp_down(int od) | ||
| 66 | { | ||
| 67 | return syscall(__NR_srp_down, od); | ||
| 68 | } | ||
| 69 | |||
| 70 | int srp_up(int od) | ||
| 71 | { | ||
| 72 | return syscall(__NR_srp_up, od); | ||
| 73 | } | ||
| 74 | |||
| 75 | int reg_task_srp_sem(int od) | ||
| 76 | { | ||
| 77 | return syscall(__NR_reg_task_srp_sem, od); | ||
| 78 | } | ||
| 79 | |||
| 80 | int get_job_no(unsigned int *job_no) | ||
| 81 | { | ||
| 82 | return syscall(__NR_query_job_no, job_no); | ||
| 83 | } | ||
| 84 | |||
| 85 | int wait_for_job_release(unsigned int job_no) | ||
| 86 | { | ||
| 87 | return syscall(__NR_wait_for_job_release, job_no); | ||
| 88 | } | ||
| 89 | |||
| 90 | int task_mode(int target_mode) | ||
| 91 | { | ||
| 92 | return syscall(__NR_task_mode, target_mode); | ||
| 93 | } | ||
| 94 | |||
| @@ -37,33 +37,16 @@ int __launch_rt_task(rt_fn_t rt_prog, void *rt_arg, rt_setup_fn_t setup, | |||
| 37 | return rt_task; | 37 | return rt_task; |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | struct create_rt_param { | ||
| 41 | int cpu; | ||
| 42 | int wcet; | ||
| 43 | int period; | ||
| 44 | task_class_t class; | ||
| 45 | }; | ||
| 46 | |||
| 47 | int setup_create_rt(int pid, struct create_rt_param* arg) | ||
| 48 | { | ||
| 49 | rt_param_t params; | ||
| 50 | params.period = arg->period; | ||
| 51 | params.exec_cost = arg->wcet; | ||
| 52 | params.cpu = arg->cpu; | ||
| 53 | params.cls = arg->class; | ||
| 54 | return set_rt_task_param(pid, ¶ms); | ||
| 55 | } | ||
| 56 | |||
| 57 | int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, | 40 | int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, |
| 58 | task_class_t class) | 41 | task_class_t class) |
| 59 | { | 42 | { |
| 60 | struct create_rt_param params; | 43 | struct rt_task params; |
| 61 | params.cpu = cpu; | 44 | params.cpu = cpu; |
| 62 | params.period = period; | 45 | params.period = period; |
| 63 | params.wcet = wcet; | 46 | params.exec_cost = wcet; |
| 64 | params.class = class; | 47 | params.cls = class; |
| 65 | return __launch_rt_task(rt_prog, arg, | 48 | return __launch_rt_task(rt_prog, arg, |
| 66 | (rt_setup_fn_t) setup_create_rt, ¶ms); | 49 | (rt_setup_fn_t) set_rt_task_param, ¶ms); |
| 67 | } | 50 | } |
| 68 | 51 | ||
| 69 | int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period) { | 52 | int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period) { |
