From e77f6c0cdd2559502a80dc7f2e60e6cdc00a3bf6 Mon Sep 17 00:00:00 2001 From: "Bjoern B. Brandenburg" Date: Thu, 23 Aug 2007 16:57:26 -0400 Subject: added new test --- Makefile | 7 +++-- litmus.c | 4 +-- wait_test.c | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 109 insertions(+), 4 deletions(-) create mode 100644 wait_test.c diff --git a/Makefile b/Makefile index c5e7723..18a3c82 100644 --- a/Makefile +++ b/Makefile @@ -2,10 +2,13 @@ CFLAGS=-Wall -g CPPFLAGS=-Wall -g -all: showsched iotest set_rt_mode run timeout rt_launch edfhsb liblitmus.a +all: showsched iotest set_rt_mode run timeout rt_launch edfhsb liblitmus.a wait_test clean: - rm *.o showsched iotest set_rt_mode run timeout rt_launch edfhsb liblitmus.a + rm *.o showsched iotest set_rt_mode run timeout rt_launch edfhsb liblitmus.a wait_test + +wait_test: wait_test.o litmus.h litmus.o + cc -static -o wait_test litmus.o wait_test.o iotest: iotest.o litmus.h litmus.o cc -static -o iotest litmus.o iotest.o diff --git a/litmus.c b/litmus.c index 6e75999..e2d07c1 100644 --- a/litmus.c +++ b/litmus.c @@ -195,7 +195,7 @@ task_class_t str2class(const char* str) #define __NR_srp_up 341 #define __NR_reg_task_srp_sem 342 #define __NR_srp_sema_free 343 -#define __NR_query_job_no 344 +#define __NR_get_job_no 344 #define __NR_wait_for_job_release 345 @@ -224,6 +224,6 @@ _syscall1(int, srp_down, srp_sema_id, sem_id); _syscall1(int, srp_up, srp_sema_id, sem_id); _syscall2(int, reg_task_srp_sem, srp_sema_id, sem_id, pid_t, t_pid); _syscall1(int, srp_sema_free, srp_sema_id, sem_id); -_syscall1(int, query_job_no, unsigned int*, job_no); +_syscall1(int, get_job_no, unsigned int*, job_no); _syscall1(int, wait_for_job_release, unsigned int, job_no); diff --git a/wait_test.c b/wait_test.c new file mode 100644 index 0000000..0ac6a4f --- /dev/null +++ b/wait_test.c @@ -0,0 +1,102 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "litmus.h" + +#define US_PER_MS 1000 + +#define NUMTASKS 4 + +int prefix(void) +{ + char field[1024]; + int prefix[1024]; + int i, sum = 0; + + for (i = 0; i < 1024; i++) { + sum += field[i]; + prefix[i] = sum; + } + return sum; +} + + +void do_stuff(void) +{ + int i =0, j =0; + + for (; i < 50000; i++) + j += prefix(); +} + +#define CALL(sc) do { ret = sc; if (ret == -1) {perror(" (!!) " #sc " failed: "); /*exit(1)*/;}} while (0); + +unsigned int job_no; + + +void next(void) +{ + int ret; + unsigned int actual; + CALL(get_job_no(&actual)); + CALL(wait_for_job_release(++job_no)); + printf("Now executing job %u, waited for %u\n", actual, job_no); +} + +void sync_jobs(void) +{ + int ret; + unsigned int actual; + CALL(get_job_no(&actual)); + job_no = actual; +} + + +int main(int argc, char** argv) +{ + int ret; + + + CALL(getpid()); + printf("my pid is %d\n", ret); + + + CALL(get_job_no(&job_no)); + printf("my job_no is %u", job_no); + + next(); + next(); + next(); + + /* now overrun a job for good */ + do_stuff(); + do_stuff(); + do_stuff(); + do_stuff(); + do_stuff(); + do_stuff(); + do_stuff(); + do_stuff(); + do_stuff(); + do_stuff(); + + + next(); + next(); + next(); + next(); + sync_jobs(); + next(); + next(); + next(); + + + return 0; +} -- cgit v1.2.2