Skip to content

Commit

Permalink
clock rework, #120
Browse files Browse the repository at this point in the history
  • Loading branch information
brabo committed Mar 13, 2017
1 parent b7031d3 commit 91e4748
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 10 deletions.
1 change: 1 addition & 0 deletions kernel/frosted.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ typedef uint32_t sigset_t;

/* generics */
volatile unsigned int jiffies;
volatile unsigned int rt_offset;
volatile int _syscall_retval;

/* Mach-specific initialization */
Expand Down
25 changes: 17 additions & 8 deletions kernel/sys.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

#include "frosted.h"
#include "sys/frosted.h"
#include <time.h>
#include <unicore-mx/cm3/scb.h>

struct timeval_kernel
Expand Down Expand Up @@ -59,22 +60,30 @@ int sys_execb_hdlr(uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, u
}


int sys_gettimeofday_hdlr(uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, uint32_t arg5)
int sys_clock_gettime_hdlr(uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, uint32_t arg5)
{
if (arg1) {
struct timeval_kernel *now = (struct timeval_kernel *)arg1;
now->tv_sec = jiffies / 1000;
now->tv_usec = (jiffies % 1000) * 1000;
if (arg2) {
struct timeval_kernel *now = (struct timeval_kernel *)arg2;
if ((clockid_t)arg1 == CLOCK_MONOTONIC) {
now->tv_sec = jiffies / 1000;
now->tv_usec = (jiffies % 1000) * 1000;
} else if ((clockid_t)arg1 == CLOCK_REALTIME) {
now->tv_sec = (rt_offset + jiffies) / 1000;
now->tv_usec = ((rt_offset + jiffies) % 1000) * 1000;
}
}
return 0;
}

int sys_clock_settime_hdlr(uint32_t arg1, uint32_t arg2, uint32_t arg3, uint32_t arg4, uint32_t arg5)
{
if (arg1) {
struct timeval_kernel *now = (struct timeval_kernel *)arg1;
if ((clockid_t)arg1 == CLOCK_MONOTONIC) {
return -EPERM;
}
if (arg2 && ((clockid_t)arg1 == CLOCK_REALTIME)) {
struct timeval_kernel *now = (struct timeval_kernel *)arg2;
unsigned int temp = (now->tv_sec * 1000) + (now->tv_usec / 1000 / 1000);
jiffies = temp;
rt_offset = temp - jiffies;
}
return 0;
}
Expand Down
4 changes: 2 additions & 2 deletions kernel/syscall_table_gen.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
["seek", 3, "sys_seek_hdlr"],
["mkdir", 2, "sys_mkdir_hdlr"],
["unlink", 1, "sys_unlink_hdlr"],
["gettimeofday",1, "sys_gettimeofday_hdlr"],
["malloc", 1, "sys_malloc_hdlr"],
["free", 1, "sys_free_hdlr"],
["calloc", 2, "sys_calloc_hdlr"],
Expand Down Expand Up @@ -103,7 +102,8 @@
["pthread_mutex_trylock", 1, "sys_pthread_mutex_trylock_hdlr"],
["pthread_mutex_unlock", 1, "sys_pthread_mutex_unlock_hdlr"],
["pthread_kill", 2, "sys_pthread_kill_hdlr"],
["clock_settime", 1, "sys_clock_settime_hdlr"],
["clock_settime", 2, "sys_clock_settime_hdlr"],
["clock_gettime", 2, "sys_clock_gettime_hdlr"],
]

#
Expand Down

0 comments on commit 91e4748

Please sign in to comment.