/* To get syscall() we need to define _GNU_SOURCE * in modern glibc versions. */ /* imported from the kernel source tree */ #include "asm/unistd.h" /* for syscall() */ #include #include "litmus.h" /* Syscall stub for setting RT mode and scheduling options */ 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_complete_job); } 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 litmus_lock(int od) { return syscall(__NR_litmus_lock, od); } int litmus_unlock(int od) { return syscall(__NR_litmus_unlock, 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 sched_setscheduler(pid_t pid, int policy, int* priority) { return syscall(__NR_sched_setscheduler, pid, policy, priority); } int sched_getscheduler(pid_t pid) { return syscall(__NR_sched_getscheduler, pid); } int wait_for_ts_release(void) { return syscall(__NR_wait_for_ts_release); } int release_ts(lt_t *delay) { return syscall(__NR_release_ts, delay); } int null_call(cycles_t *timestamp) { return syscall(__NR_null_call, timestamp); } int reservation_create(int rtype, void *config) { return syscall(__NR_reservation_create, rtype, config); } int reservation_destroy(unsigned int reservation_id, int cpu) { return syscall(__NR_reservation_destroy, reservation_id, cpu); } int set_mc2_task_param(pid_t pid, struct mc2_task *param) { return syscall(__NR_set_mc2_task_param, pid, param); } int set_page_color(int cpu) { return syscall(__NR_set_page_color, cpu); } int run_bench(int type, int wss, cacheline_t *src, cacheline_t *dst, lt_t *ts) { return syscall(__NR_run_test, type, wss, src, dst, ts); } int lock_buffer(void* vaddr, size_t size, unsigned int lock_way, unsigned int unlock_way) { return syscall(__NR_lock_buffer, vaddr, size, lock_way, unlock_way); }