From 03e9cedc1879ffacc8f28a6fd38f0b73888b2826 Mon Sep 17 00:00:00 2001 From: Namhoon Kim Date: Sat, 30 Apr 2016 21:45:01 +0000 Subject: RTSS16 microbench --- src/color_shm.c | 40 ++++++++++++++++++++++++++++++++++++++ src/kernel_iface.c | 56 ------------------------------------------------------ src/syscalls.c | 4 ++-- 3 files changed, 42 insertions(+), 58 deletions(-) create mode 100644 src/color_shm.c (limited to 'src') diff --git a/src/color_shm.c b/src/color_shm.c new file mode 100644 index 0000000..8531445 --- /dev/null +++ b/src/color_shm.c @@ -0,0 +1,40 @@ +#include +#include + +#include "color_shm.h" + +void* color_mmap(size_t size, struct color_ioctl_cmd cmd, struct color_ioctl_offset offset) +{ + int ret, fd; + void *mem; + + fd = open("/dev/litmus/color_shm", O_RDWR); + if (fd < 0) { + printf("Device open error.\n"); + return NULL; + } + + ret = ioctl(fd, SET_COLOR_SHM_CMD, &cmd); + if (ret < 0) { + printf("ioctl failed.\n"); + return NULL; + } + + ret = ioctl(fd, SET_COLOR_SHM_OFFSET, &offset); + if (ret < 0) { + printf("ioctl failed.\n"); + return NULL; + } + + size += offset.offset; + mem = mmap(NULL, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); + if (mem == MAP_FAILED) { + printf("mmap failed.\n"); + return MAP_FAILED; + } + close(fd); + + mem += offset.offset; + + return mem; +} \ No newline at end of file diff --git a/src/kernel_iface.c b/src/kernel_iface.c index 49cef2a..a2c2104 100644 --- a/src/kernel_iface.c +++ b/src/kernel_iface.c @@ -140,62 +140,6 @@ int requested_to_preempt(void) return (likely(ctrl_page != NULL) && ctrl_page->sched.np.preempt); } -void enter_pgm_wait(void) -{ - if (likely(ctrl_page != NULL) || init_kernel_iface() == 0) { - assert(!ctrl_page->pgm_waiting); - ctrl_page->pgm_waiting = 1; - __sync_synchronize(); - } - else { - fprintf(stderr, "enter_pgm_wait: control page not mapped!\n"); - } -} - -void exit_pgm_wait(void) -{ - if (likely(ctrl_page != NULL)) { - assert(ctrl_page->pgm_waiting); - ctrl_page->pgm_waiting = 0; - __sync_synchronize(); - } - else { - fprintf(stderr, "exit_pgm_wait: control page not mapped!\n"); - } -} - -void enter_pgm_send(void) -{ - if (likely(ctrl_page != NULL) || init_kernel_iface() == 0) { - assert(!ctrl_page->pgm_sending); - ctrl_page->pgm_sending = 1; /* we will become boosted if - anyone tries to preempt us. */ - __sync_synchronize(); - } - else { - fprintf(stderr, "enter_pgm_send: control page not mapped!\n"); - } -} - -void exit_pgm_send(void) -{ - if (likely(ctrl_page != NULL)) { - assert(ctrl_page->pgm_sending); - - ctrl_page->pgm_satisfied = 1; - __sync_synchronize(); - - /* re-eval priority. Should clear pgm_sending and pgm_satisfied. */ - sched_yield(); - - /* double check that Litmus is doing its job */ - assert(!ctrl_page->pgm_sending && !ctrl_page->pgm_satisfied); - } - else { - fprintf(stderr, "exit_pgm_send: control page not mapped!\n"); - } -} - /* init and return a ptr to the control page for * preemption and migration overhead analysis * diff --git a/src/syscalls.c b/src/syscalls.c index ab064ad..31fd62f 100644 --- a/src/syscalls.c +++ b/src/syscalls.c @@ -107,7 +107,7 @@ int set_page_color(int cpu) return syscall(__NR_set_page_color, cpu); } -int test_call(unsigned int param) +int run_bench(int type, int wss, cacheline_t *src, cacheline_t *dst, lt_t *ts) { - return syscall(__NR_test_call, param); + return syscall(__NR_run_test, type, wss, src, dst, ts); } -- cgit v1.2.2