Loading arch/um/include/shared/os.h +3 −5 Original line number Diff line number Diff line Loading @@ -250,15 +250,13 @@ extern void os_warn(const char *fmt, ...) /* time.c */ extern void os_idle_sleep(unsigned long long nsecs); extern int os_timer_create(void* timer); extern int os_timer_set_interval(void* timer, void* its); extern int os_timer_create(void); extern int os_timer_set_interval(void); extern int os_timer_one_shot(unsigned long ticks); extern long long os_timer_disable(void); extern long os_timer_remain(void* timer); extern void os_timer_disable(void); extern void uml_idle_timer(void); extern long long os_persistent_clock_emulation(void); extern long long os_nsecs(void); extern long long os_vnsecs(void); /* skas/mem.c */ extern long run_syscall_stub(struct mm_id * mm_idp, Loading arch/um/kernel/time.c +2 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ static int itimer_shutdown(struct clock_event_device *evt) static int itimer_set_periodic(struct clock_event_device *evt) { os_timer_set_interval(NULL, NULL); os_timer_set_interval(); return 0; } Loading Loading @@ -107,7 +107,7 @@ static void __init um_timer_setup(void) printk(KERN_ERR "register_timer : request_irq failed - " "errno = %d\n", -err); err = os_timer_create(NULL); err = os_timer_create(); if (err != 0) { printk(KERN_ERR "creation of timer failed - errno = %d\n", -err); return; Loading arch/um/os-Linux/time.c +26 −93 Original line number Diff line number Diff line Loading @@ -26,11 +26,11 @@ static inline long long timeval_to_ns(const struct timeval *tv) static inline long long timespec_to_ns(const struct timespec *ts) { return ((long long) ts->tv_sec * UM_NSEC_PER_SEC) + ts->tv_nsec; return ((long long) ts->tv_sec * UM_NSEC_PER_SEC) + ts->tv_nsec; } long long os_persistent_clock_emulation (void) { long long os_persistent_clock_emulation(void) { struct timespec realtime_tp; clock_gettime(CLOCK_REALTIME, &realtime_tp); Loading @@ -40,94 +40,45 @@ long long os_persistent_clock_emulation (void) { /** * os_timer_create() - create an new posix (interval) timer */ int os_timer_create(void* timer) { timer_t* t = timer; if(t == NULL) { t = &event_high_res_timer; } int os_timer_create(void) { timer_t *t = &event_high_res_timer; if (timer_create( CLOCK_MONOTONIC, NULL, t) == -1) { if (timer_create(CLOCK_MONOTONIC, NULL, t) == -1) return -1; } return 0; } int os_timer_set_interval(void* timer, void* i) int os_timer_set_interval(void) { struct itimerspec its; unsigned long long nsec; timer_t* t = timer; struct itimerspec* its_in = i; if(t == NULL) { t = &event_high_res_timer; } nsec = UM_NSEC_PER_SEC / UM_HZ; if(its_in != NULL) { its.it_value.tv_sec = its_in->it_value.tv_sec; its.it_value.tv_nsec = its_in->it_value.tv_nsec; } else { its.it_value.tv_sec = 0; its.it_value.tv_nsec = nsec; } its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = nsec; if(timer_settime(*t, 0, &its, NULL) == -1) { if (timer_settime(event_high_res_timer, 0, &its, NULL) == -1) return -errno; } return 0; } /** * os_timer_remain() - returns the remaining nano seconds of the given interval * timer * Because this is the remaining time of an interval timer, which correspondends * to HZ, this value can never be bigger than one second. Just * the nanosecond part of the timer is returned. * The returned time is relative to the start time of the interval timer. * Return an negative value in an error case. */ long os_timer_remain(void* timer) { struct itimerspec its; timer_t* t = timer; if(t == NULL) { t = &event_high_res_timer; } if(timer_gettime(t, &its) == -1) { return -errno; } return its.it_value.tv_nsec; } int os_timer_one_shot(unsigned long ticks) { struct itimerspec its; unsigned long long nsec; unsigned long sec; nsec = (ticks + 1); sec = nsec / UM_NSEC_PER_SEC; nsec = nsec % UM_NSEC_PER_SEC; unsigned long long nsec = ticks + 1; struct itimerspec its = { .it_value.tv_sec = nsec / UM_NSEC_PER_SEC, .it_value.tv_nsec = nsec % UM_NSEC_PER_SEC, its.it_value.tv_sec = nsec / UM_NSEC_PER_SEC; its.it_value.tv_nsec = nsec; its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = 0; // we cheat here .it_interval.tv_sec = 0, .it_interval.tv_nsec = 0, // we cheat here }; timer_settime(event_high_res_timer, 0, &its, NULL); return 0; Loading @@ -135,24 +86,13 @@ int os_timer_one_shot(unsigned long ticks) /** * os_timer_disable() - disable the posix (interval) timer * Returns the remaining interval timer time in nanoseconds */ long long os_timer_disable(void) void os_timer_disable(void) { struct itimerspec its; memset(&its, 0, sizeof(struct itimerspec)); timer_settime(event_high_res_timer, 0, &its, &its); return its.it_value.tv_sec * UM_NSEC_PER_SEC + its.it_value.tv_nsec; } long long os_vnsecs(void) { struct timespec ts; clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&ts); return timespec_to_ns(&ts); timer_settime(event_high_res_timer, 0, &its, NULL); } long long os_nsecs(void) Loading @@ -169,21 +109,14 @@ long long os_nsecs(void) */ void os_idle_sleep(unsigned long long nsecs) { struct timespec ts; if (nsecs <= 0) { return; } ts = ((struct timespec) { struct timespec ts = { .tv_sec = nsecs / UM_NSEC_PER_SEC, .tv_nsec = nsecs % UM_NSEC_PER_SEC }); }; /* * Relay the signal if clock_nanosleep is interrupted. */ if (clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL)) { if (clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL)) deliver_alarm(); } } Loading
arch/um/include/shared/os.h +3 −5 Original line number Diff line number Diff line Loading @@ -250,15 +250,13 @@ extern void os_warn(const char *fmt, ...) /* time.c */ extern void os_idle_sleep(unsigned long long nsecs); extern int os_timer_create(void* timer); extern int os_timer_set_interval(void* timer, void* its); extern int os_timer_create(void); extern int os_timer_set_interval(void); extern int os_timer_one_shot(unsigned long ticks); extern long long os_timer_disable(void); extern long os_timer_remain(void* timer); extern void os_timer_disable(void); extern void uml_idle_timer(void); extern long long os_persistent_clock_emulation(void); extern long long os_nsecs(void); extern long long os_vnsecs(void); /* skas/mem.c */ extern long run_syscall_stub(struct mm_id * mm_idp, Loading
arch/um/kernel/time.c +2 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,7 @@ static int itimer_shutdown(struct clock_event_device *evt) static int itimer_set_periodic(struct clock_event_device *evt) { os_timer_set_interval(NULL, NULL); os_timer_set_interval(); return 0; } Loading Loading @@ -107,7 +107,7 @@ static void __init um_timer_setup(void) printk(KERN_ERR "register_timer : request_irq failed - " "errno = %d\n", -err); err = os_timer_create(NULL); err = os_timer_create(); if (err != 0) { printk(KERN_ERR "creation of timer failed - errno = %d\n", -err); return; Loading
arch/um/os-Linux/time.c +26 −93 Original line number Diff line number Diff line Loading @@ -26,11 +26,11 @@ static inline long long timeval_to_ns(const struct timeval *tv) static inline long long timespec_to_ns(const struct timespec *ts) { return ((long long) ts->tv_sec * UM_NSEC_PER_SEC) + ts->tv_nsec; return ((long long) ts->tv_sec * UM_NSEC_PER_SEC) + ts->tv_nsec; } long long os_persistent_clock_emulation (void) { long long os_persistent_clock_emulation(void) { struct timespec realtime_tp; clock_gettime(CLOCK_REALTIME, &realtime_tp); Loading @@ -40,94 +40,45 @@ long long os_persistent_clock_emulation (void) { /** * os_timer_create() - create an new posix (interval) timer */ int os_timer_create(void* timer) { timer_t* t = timer; if(t == NULL) { t = &event_high_res_timer; } int os_timer_create(void) { timer_t *t = &event_high_res_timer; if (timer_create( CLOCK_MONOTONIC, NULL, t) == -1) { if (timer_create(CLOCK_MONOTONIC, NULL, t) == -1) return -1; } return 0; } int os_timer_set_interval(void* timer, void* i) int os_timer_set_interval(void) { struct itimerspec its; unsigned long long nsec; timer_t* t = timer; struct itimerspec* its_in = i; if(t == NULL) { t = &event_high_res_timer; } nsec = UM_NSEC_PER_SEC / UM_HZ; if(its_in != NULL) { its.it_value.tv_sec = its_in->it_value.tv_sec; its.it_value.tv_nsec = its_in->it_value.tv_nsec; } else { its.it_value.tv_sec = 0; its.it_value.tv_nsec = nsec; } its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = nsec; if(timer_settime(*t, 0, &its, NULL) == -1) { if (timer_settime(event_high_res_timer, 0, &its, NULL) == -1) return -errno; } return 0; } /** * os_timer_remain() - returns the remaining nano seconds of the given interval * timer * Because this is the remaining time of an interval timer, which correspondends * to HZ, this value can never be bigger than one second. Just * the nanosecond part of the timer is returned. * The returned time is relative to the start time of the interval timer. * Return an negative value in an error case. */ long os_timer_remain(void* timer) { struct itimerspec its; timer_t* t = timer; if(t == NULL) { t = &event_high_res_timer; } if(timer_gettime(t, &its) == -1) { return -errno; } return its.it_value.tv_nsec; } int os_timer_one_shot(unsigned long ticks) { struct itimerspec its; unsigned long long nsec; unsigned long sec; nsec = (ticks + 1); sec = nsec / UM_NSEC_PER_SEC; nsec = nsec % UM_NSEC_PER_SEC; unsigned long long nsec = ticks + 1; struct itimerspec its = { .it_value.tv_sec = nsec / UM_NSEC_PER_SEC, .it_value.tv_nsec = nsec % UM_NSEC_PER_SEC, its.it_value.tv_sec = nsec / UM_NSEC_PER_SEC; its.it_value.tv_nsec = nsec; its.it_interval.tv_sec = 0; its.it_interval.tv_nsec = 0; // we cheat here .it_interval.tv_sec = 0, .it_interval.tv_nsec = 0, // we cheat here }; timer_settime(event_high_res_timer, 0, &its, NULL); return 0; Loading @@ -135,24 +86,13 @@ int os_timer_one_shot(unsigned long ticks) /** * os_timer_disable() - disable the posix (interval) timer * Returns the remaining interval timer time in nanoseconds */ long long os_timer_disable(void) void os_timer_disable(void) { struct itimerspec its; memset(&its, 0, sizeof(struct itimerspec)); timer_settime(event_high_res_timer, 0, &its, &its); return its.it_value.tv_sec * UM_NSEC_PER_SEC + its.it_value.tv_nsec; } long long os_vnsecs(void) { struct timespec ts; clock_gettime(CLOCK_PROCESS_CPUTIME_ID,&ts); return timespec_to_ns(&ts); timer_settime(event_high_res_timer, 0, &its, NULL); } long long os_nsecs(void) Loading @@ -169,21 +109,14 @@ long long os_nsecs(void) */ void os_idle_sleep(unsigned long long nsecs) { struct timespec ts; if (nsecs <= 0) { return; } ts = ((struct timespec) { struct timespec ts = { .tv_sec = nsecs / UM_NSEC_PER_SEC, .tv_nsec = nsecs % UM_NSEC_PER_SEC }); }; /* * Relay the signal if clock_nanosleep is interrupted. */ if (clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL)) { if (clock_nanosleep(CLOCK_MONOTONIC, 0, &ts, NULL)) deliver_alarm(); } }