From 2d507260ee723f8302c5c97a9bda1cf00f30ec99 Mon Sep 17 00:00:00 2001 From: "Bjoern B. Brandenburg" Date: Sun, 3 Feb 2008 01:09:48 -0500 Subject: many changes - use declarations from kernel - get rid of stuipd system call macros --- Makefile | 7 ++- bin/base_mt_task.c | 5 --- include/litmus.h | 36 +++------------ include/syscalls.h | 38 ---------------- src/litmus.c | 8 ++-- src/syscalls.c | 126 ++++++++++++++++++++++++++++++++++------------------- src/task.c | 25 ++--------- 7 files changed, 100 insertions(+), 145 deletions(-) delete mode 100644 include/syscalls.h diff --git a/Makefile b/Makefile index 2164d23..38af7fe 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,8 @@ -CFLAGS=-Wall -Wdeclaration-after-statement -g -Iinclude/ -D_XOPEN_SOURCE=600 +KERNEL_DIR = ../litmus + +INC=-Iinclude/ -I${KERNEL_DIR}/include/ + +CFLAGS=-Wall -Wdeclaration-after-statement ${INC} -g -D_XOPEN_SOURCE=600 CPPFLAGS=-Wall -g LIBS= ./liblitmus.a @@ -41,4 +45,3 @@ stdump: liblitmus.a litmus.h sched_trace.h stdump.o liblitmus.a: ${LIB_OBJ} litmus.h ${AR} rcs liblitmus.a ${LIB_OBJ} - diff --git a/bin/base_mt_task.c b/bin/base_mt_task.c index 24f2070..a1e3731 100644 --- a/bin/base_mt_task.c +++ b/bin/base_mt_task.c @@ -121,7 +121,6 @@ int main(int argc, char** argv) void* rt_thread(struct thread_context* ctx) { int do_exit; - rt_param_t param; /* Make presence visible. */ printf("RT Thread %d active.\n", ctx->id); @@ -132,10 +131,6 @@ void* rt_thread(struct thread_context* ctx) CALL( init_rt_thread() ); CALL( sporadic_global(EXEC_COST, PERIOD) ); - /* Just for fun display the real-time parameters of this thread. */ - CALL( get_rt_task_param(gettid(), ¶m) ); - show_rt_param(¶m); - /***** * 2) Transition to real-time mode. */ diff --git a/include/litmus.h b/include/litmus.h index 8918ae9..cf39f80 100644 --- a/include/litmus.h +++ b/include/litmus.h @@ -1,41 +1,16 @@ #ifndef LITMUS_H #define LITMUS_H +#include #include -/* A real-time program. */ -typedef int (*rt_fn_t)(void*); - -/* different types of clients */ -typedef enum { - RT_CLASS_HARD, - RT_CLASS_SOFT, - RT_CLASS_BEST_EFFORT -} task_class_t; - -/* Task RT params for schedulers */ -/* RT task parameters for scheduling extensions -* These parameters are inherited during clone and therefore must -* be explicitly set up before the task set is launched. -*/ -typedef struct rt_param { - /* Execution cost */ - unsigned long exec_cost; - /* Period */ - unsigned long period; - /* Partition */ - unsigned int cpu; - /* type of task */ - task_class_t cls; -} rt_param_t; - typedef int pid_t; /* PID of a task */ /* obtain the PID of a thread */ pid_t gettid(void); -int set_rt_task_param(pid_t pid, rt_param_t* param); -int get_rt_task_param(pid_t pid, rt_param_t* param); +int set_rt_task_param(pid_t pid, struct rt_task* param); +int get_rt_task_param(pid_t pid, struct rt_task* param); /* setup helper */ int sporadic_task(unsigned long exec_cost, unsigned long period, @@ -77,6 +52,9 @@ int init_litmus(void); int init_rt_thread(void); void exit_litmus(void); +/* A real-time program. */ +typedef int (*rt_fn_t)(void*); + int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period); int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, task_class_t cls); @@ -88,7 +66,7 @@ enum rt_task_mode_t { }; int task_mode(int target_mode); -void show_rt_param(rt_param_t* tp); +void show_rt_param(struct rt_task* tp); task_class_t str2class(const char* str); /* non-preemptive section support */ diff --git a/include/syscalls.h b/include/syscalls.h deleted file mode 100644 index 28f1a39..0000000 --- a/include/syscalls.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef SYSCALLS_H -#define SYSCALLS_H - -/* this is missing in newer linux/unistd.h versions */ - -#define _syscall0(type,name) \ -type name(void) \ -{\ - return syscall(__NR_##name);\ -} - -#define _syscall1(type,name,type1,arg1) \ -type name(type1 arg1) \ -{\ - return syscall(__NR_##name, arg1);\ -} - - -#define _syscall2(type,name,type1,arg1,type2,arg2) \ -type name(type1 arg1,type2 arg2) \ -{\ - return syscall(__NR_##name, arg1, arg2);\ -} - -#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \ -type name(type1 arg1,type2 arg2, type3 arg3) \ -{\ - return syscall(__NR_##name, arg1, arg2, arg3); \ -} - -#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\ -type name(type1 arg1,type2 arg2, type3 arg3, type4 arg4) \ -{\ - return syscall(__NR_##name, arg1, arg2, arg3, arg4); \ -} - - -#endif 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 @@ #include "litmus.h" #include "internal.h" -void show_rt_param(rt_param_t* tp) +void show_rt_param(struct rt_task* tp) { printf("rt params:\n\t" - "exec_cost:\t%ld\n\tperiod:\t\t%ld\n\tcpu:\t%d\n", + "exec_cost:\t%llu\n\tperiod:\t\t%llu\n\tcpu:\t%d\n", tp->exec_cost, tp->period, tp->cpu); } @@ -30,11 +30,11 @@ task_class_t str2class(const char* str) int sporadic_task(unsigned long e, unsigned long p, int cpu, task_class_t cls) { - rt_param_t param; + struct rt_task param; param.exec_cost = e; param.period = p; param.cpu = cpu; - param.cls = cls; + param.cls = cls; return set_rt_task_param(gettid(), ¶m); } 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 @@ #include "litmus.h" -#include "syscalls.h" - struct np_flag; -/* Litmus syscalls definitions */ -#define __NR_sched_setpolicy 320 -#define __NR_sched_getpolicy 321 -#define __NR_set_rt_mode 322 -#define __NR_set_rt_task_param 323 -#define __NR_get_rt_task_param 324 -#define __NR_sleep_next_period 326 -#define __NR_scheduler_setup 327 -#define __NR_register_np_flag 328 -#define __NR_signal_exit_np 329 -#define __NR_od_openx 330 -#define __NR_od_close 331 -#define __NR_pi_down 332 -#define __NR_pi_up 333 -#define __NR_srp_down 334 -#define __NR_srp_up 335 -#define __NR_reg_task_srp_sem 336 -#define __NR_get_job_no 337 -#define __NR_wait_for_job_release 338 -#define __NR_set_service_levels 339 -#define __NR_get_cur_service_level 340 -#define __NR_reg_ics_cb 341 -#define __NR_start_wcs 342 -#define __NR_task_mode 343 - /* Syscall stub for setting RT mode and scheduling options */ -_syscall0(pid_t, gettid); - -_syscall2(int, set_rt_task_param, pid_t, pid, rt_param_t*, arg1); -_syscall2(int, get_rt_task_param, pid_t, pid, rt_param_t*, arg1); -_syscall0(int, sleep_next_period); -_syscall1(int, register_np_flag, struct np_flag*, flag); -_syscall0(int, signal_exit_np); - -_syscall4(int, od_openx, int, fd, obj_type_t, type, int, obj_id, - void*, config); -_syscall1(int, od_close, int, od); -_syscall1(int, pi_down, int, od); -_syscall1(int, pi_up, int, od); -_syscall1(int, srp_down, int, od); -_syscall1(int, srp_up, int, od); -_syscall1(int, reg_task_srp_sem, int, od); -_syscall1(int, get_job_no, unsigned int*, job_no); -_syscall1(int, wait_for_job_release, unsigned int, job_no); -_syscall1(int, task_mode, int, target_mode); +pid_t gettid(void) +{ + return syscall(__NR_gettid); +} + +int set_rt_task_param(pid_t pid, struct rt_task *param) +{ + return syscall(__NR_set_rt_task_param, pid, param); +} + +int get_rt_task_param(pid_t pid, struct rt_task *param) +{ + return syscall(__NR_get_rt_task_param, pid, param); +} + +int sleep_next_period(void) +{ + return syscall(__NR_sleep_next_period); +} + +int register_np_flag(struct np_flag *flag) +{ + return syscall(__NR_register_np_flag, flag); +} + +int signal_exit_np(void) +{ + return syscall(__NR_exit_np); +} + +int od_openx(int fd, obj_type_t type, int obj_id, void *config) +{ + return syscall(__NR_od_open, fd, type, obj_id, config); +} + +int od_close(int od) +{ + return syscall(__NR_od_close, od); +} + +int pi_down(int od) +{ + return syscall(__NR_pi_down, od); +} + +int pi_up(int od) +{ + return syscall(__NR_pi_up, od); +} + +int srp_down(int od) +{ + return syscall(__NR_srp_down, od); +} + +int srp_up(int od) +{ + return syscall(__NR_srp_up, od); +} + +int reg_task_srp_sem(int od) +{ + return syscall(__NR_reg_task_srp_sem, od); +} + +int get_job_no(unsigned int *job_no) +{ + return syscall(__NR_query_job_no, job_no); +} + +int wait_for_job_release(unsigned int job_no) +{ + return syscall(__NR_wait_for_job_release, job_no); +} + +int task_mode(int target_mode) +{ + return syscall(__NR_task_mode, target_mode); +} + diff --git a/src/task.c b/src/task.c index 47d68e1..7cfa6ce 100644 --- a/src/task.c +++ b/src/task.c @@ -37,33 +37,16 @@ int __launch_rt_task(rt_fn_t rt_prog, void *rt_arg, rt_setup_fn_t setup, return rt_task; } -struct create_rt_param { - int cpu; - int wcet; - int period; - task_class_t class; -}; - -int setup_create_rt(int pid, struct create_rt_param* arg) -{ - rt_param_t params; - params.period = arg->period; - params.exec_cost = arg->wcet; - params.cpu = arg->cpu; - params.cls = arg->class; - return set_rt_task_param(pid, ¶ms); -} - int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period, task_class_t class) { - struct create_rt_param params; + struct rt_task params; params.cpu = cpu; params.period = period; - params.wcet = wcet; - params.class = class; + params.exec_cost = wcet; + params.cls = class; return __launch_rt_task(rt_prog, arg, - (rt_setup_fn_t) setup_create_rt, ¶ms); + (rt_setup_fn_t) set_rt_task_param, ¶ms); } int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period) { -- cgit v1.2.2