aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjoern B. Brandenburg <bbb@cs.unc.edu>2008-02-03 01:09:48 -0500
committerBjoern B. Brandenburg <bbb@cs.unc.edu>2008-02-03 01:09:48 -0500
commit2d507260ee723f8302c5c97a9bda1cf00f30ec99 (patch)
tree033231fa56c53c67916cbc1f1a05d9560ef1d4ab
parent526afdfb333ca29170fd210b08860ac2a4c141ed (diff)
many changes
- use declarations from kernel - get rid of stuipd system call macros
-rw-r--r--Makefile7
-rw-r--r--bin/base_mt_task.c5
-rw-r--r--include/litmus.h36
-rw-r--r--include/syscalls.h38
-rw-r--r--src/litmus.c8
-rw-r--r--src/syscalls.c126
-rw-r--r--src/task.c25
7 files changed, 100 insertions, 145 deletions
diff --git a/Makefile b/Makefile
index 2164d23..38af7fe 100644
--- a/Makefile
+++ b/Makefile
@@ -1,4 +1,8 @@
1CFLAGS=-Wall -Wdeclaration-after-statement -g -Iinclude/ -D_XOPEN_SOURCE=600 1KERNEL_DIR = ../litmus
2
3INC=-Iinclude/ -I${KERNEL_DIR}/include/
4
5CFLAGS=-Wall -Wdeclaration-after-statement ${INC} -g -D_XOPEN_SOURCE=600
2CPPFLAGS=-Wall -g 6CPPFLAGS=-Wall -g
3 7
4LIBS= ./liblitmus.a 8LIBS= ./liblitmus.a
@@ -41,4 +45,3 @@ stdump: liblitmus.a litmus.h sched_trace.h stdump.o
41 45
42liblitmus.a: ${LIB_OBJ} litmus.h 46liblitmus.a: ${LIB_OBJ} litmus.h
43 ${AR} rcs liblitmus.a ${LIB_OBJ} 47 ${AR} rcs liblitmus.a ${LIB_OBJ}
44
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)
121void* rt_thread(struct thread_context* ctx) 121void* rt_thread(struct thread_context* ctx)
122{ 122{
123 int do_exit; 123 int do_exit;
124 rt_param_t param;
125 124
126 /* Make presence visible. */ 125 /* Make presence visible. */
127 printf("RT Thread %d active.\n", ctx->id); 126 printf("RT Thread %d active.\n", ctx->id);
@@ -132,10 +131,6 @@ void* rt_thread(struct thread_context* ctx)
132 CALL( init_rt_thread() ); 131 CALL( init_rt_thread() );
133 CALL( sporadic_global(EXEC_COST, PERIOD) ); 132 CALL( sporadic_global(EXEC_COST, PERIOD) );
134 133
135 /* Just for fun display the real-time parameters of this thread. */
136 CALL( get_rt_task_param(gettid(), &param) );
137 show_rt_param(&param);
138
139 /***** 134 /*****
140 * 2) Transition to real-time mode. 135 * 2) Transition to real-time mode.
141 */ 136 */
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 @@
1#ifndef LITMUS_H 1#ifndef LITMUS_H
2#define LITMUS_H 2#define LITMUS_H
3 3
4#include <linux/rt_param.h>
4#include <sys/types.h> 5#include <sys/types.h>
5 6
6/* A real-time program. */
7typedef int (*rt_fn_t)(void*);
8
9/* different types of clients */
10typedef enum {
11 RT_CLASS_HARD,
12 RT_CLASS_SOFT,
13 RT_CLASS_BEST_EFFORT
14} task_class_t;
15
16/* Task RT params for schedulers */
17/* RT task parameters for scheduling extensions
18* These parameters are inherited during clone and therefore must
19* be explicitly set up before the task set is launched.
20*/
21typedef struct rt_param {
22 /* Execution cost */
23 unsigned long exec_cost;
24 /* Period */
25 unsigned long period;
26 /* Partition */
27 unsigned int cpu;
28 /* type of task */
29 task_class_t cls;
30} rt_param_t;
31
32typedef int pid_t; /* PID of a task */ 7typedef int pid_t; /* PID of a task */
33 8
34/* obtain the PID of a thread */ 9/* obtain the PID of a thread */
35pid_t gettid(void); 10pid_t gettid(void);
36 11
37int set_rt_task_param(pid_t pid, rt_param_t* param); 12int set_rt_task_param(pid_t pid, struct rt_task* param);
38int get_rt_task_param(pid_t pid, rt_param_t* param); 13int get_rt_task_param(pid_t pid, struct rt_task* param);
39 14
40/* setup helper */ 15/* setup helper */
41int sporadic_task(unsigned long exec_cost, unsigned long period, 16int sporadic_task(unsigned long exec_cost, unsigned long period,
@@ -77,6 +52,9 @@ int init_litmus(void);
77int init_rt_thread(void); 52int init_rt_thread(void);
78void exit_litmus(void); 53void exit_litmus(void);
79 54
55/* A real-time program. */
56typedef int (*rt_fn_t)(void*);
57
80int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period); 58int create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, int period);
81int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet, 59int __create_rt_task(rt_fn_t rt_prog, void *arg, int cpu, int wcet,
82 int period, task_class_t cls); 60 int period, task_class_t cls);
@@ -88,7 +66,7 @@ enum rt_task_mode_t {
88}; 66};
89int task_mode(int target_mode); 67int task_mode(int target_mode);
90 68
91void show_rt_param(rt_param_t* tp); 69void show_rt_param(struct rt_task* tp);
92task_class_t str2class(const char* str); 70task_class_t str2class(const char* str);
93 71
94/* non-preemptive section support */ 72/* 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 @@
1#ifndef SYSCALLS_H
2#define SYSCALLS_H
3
4/* this is missing in newer linux/unistd.h versions */
5
6#define _syscall0(type,name) \
7type name(void) \
8{\
9 return syscall(__NR_##name);\
10}
11
12#define _syscall1(type,name,type1,arg1) \
13type name(type1 arg1) \
14{\
15 return syscall(__NR_##name, arg1);\
16}
17
18
19#define _syscall2(type,name,type1,arg1,type2,arg2) \
20type name(type1 arg1,type2 arg2) \
21{\
22 return syscall(__NR_##name, arg1, arg2);\
23}
24
25#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
26type name(type1 arg1,type2 arg2, type3 arg3) \
27{\
28 return syscall(__NR_##name, arg1, arg2, arg3); \
29}
30
31#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4)\
32type name(type1 arg1,type2 arg2, type3 arg3, type4 arg4) \
33{\
34 return syscall(__NR_##name, arg1, arg2, arg3, arg4); \
35}
36
37
38#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 @@
8#include "litmus.h" 8#include "litmus.h"
9#include "internal.h" 9#include "internal.h"
10 10
11void show_rt_param(rt_param_t* tp) 11void 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)
30int sporadic_task(unsigned long e, unsigned long p, 30int 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(), &param); 38 return set_rt_task_param(gettid(), &param);
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
13struct np_flag; 11struct 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