um: Timer code cleanup
There are some unused functions, and some others that have unused arguments; clean up the timer code a bit. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Richard Weinberger <richard@nod.at>
This commit is contained in:
committed by
Richard Weinberger
parent
fcd242c6c8
commit
56fc187065
@@ -250,15 +250,13 @@ extern void os_warn(const char *fmt, ...)
|
|||||||
|
|
||||||
/* time.c */
|
/* time.c */
|
||||||
extern void os_idle_sleep(unsigned long long nsecs);
|
extern void os_idle_sleep(unsigned long long nsecs);
|
||||||
extern int os_timer_create(void* timer);
|
extern int os_timer_create(void);
|
||||||
extern int os_timer_set_interval(void* timer, void* its);
|
extern int os_timer_set_interval(void);
|
||||||
extern int os_timer_one_shot(unsigned long ticks);
|
extern int os_timer_one_shot(unsigned long ticks);
|
||||||
extern long long os_timer_disable(void);
|
extern void os_timer_disable(void);
|
||||||
extern long os_timer_remain(void* timer);
|
|
||||||
extern void uml_idle_timer(void);
|
extern void uml_idle_timer(void);
|
||||||
extern long long os_persistent_clock_emulation(void);
|
extern long long os_persistent_clock_emulation(void);
|
||||||
extern long long os_nsecs(void);
|
extern long long os_nsecs(void);
|
||||||
extern long long os_vnsecs(void);
|
|
||||||
|
|
||||||
/* skas/mem.c */
|
/* skas/mem.c */
|
||||||
extern long run_syscall_stub(struct mm_id * mm_idp,
|
extern long run_syscall_stub(struct mm_id * mm_idp,
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ static int itimer_shutdown(struct clock_event_device *evt)
|
|||||||
|
|
||||||
static int itimer_set_periodic(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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ static void __init um_timer_setup(void)
|
|||||||
printk(KERN_ERR "register_timer : request_irq failed - "
|
printk(KERN_ERR "register_timer : request_irq failed - "
|
||||||
"errno = %d\n", -err);
|
"errno = %d\n", -err);
|
||||||
|
|
||||||
err = os_timer_create(NULL);
|
err = os_timer_create();
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
printk(KERN_ERR "creation of timer failed - errno = %d\n", -err);
|
printk(KERN_ERR "creation of timer failed - errno = %d\n", -err);
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -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)
|
static inline long long timespec_to_ns(const struct timespec *ts)
|
||||||
{
|
{
|
||||||
return ((long long) ts->tv_sec * UM_NSEC_PER_SEC) +
|
return ((long long) ts->tv_sec * UM_NSEC_PER_SEC) + ts->tv_nsec;
|
||||||
ts->tv_nsec;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
long long os_persistent_clock_emulation (void) {
|
long long os_persistent_clock_emulation(void)
|
||||||
|
{
|
||||||
struct timespec realtime_tp;
|
struct timespec realtime_tp;
|
||||||
|
|
||||||
clock_gettime(CLOCK_REALTIME, &realtime_tp);
|
clock_gettime(CLOCK_REALTIME, &realtime_tp);
|
||||||
@@ -40,94 +40,45 @@ long long os_persistent_clock_emulation (void) {
|
|||||||
/**
|
/**
|
||||||
* os_timer_create() - create an new posix (interval) timer
|
* os_timer_create() - create an new posix (interval) timer
|
||||||
*/
|
*/
|
||||||
int os_timer_create(void* timer) {
|
int os_timer_create(void)
|
||||||
|
{
|
||||||
|
timer_t *t = &event_high_res_timer;
|
||||||
|
|
||||||
timer_t* t = timer;
|
if (timer_create(CLOCK_MONOTONIC, NULL, t) == -1)
|
||||||
|
|
||||||
if(t == NULL) {
|
|
||||||
t = &event_high_res_timer;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timer_create(
|
|
||||||
CLOCK_MONOTONIC,
|
|
||||||
NULL,
|
|
||||||
t) == -1) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int os_timer_set_interval(void* timer, void* i)
|
int os_timer_set_interval(void)
|
||||||
{
|
{
|
||||||
struct itimerspec its;
|
struct itimerspec its;
|
||||||
unsigned long long nsec;
|
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;
|
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_sec = 0;
|
||||||
its.it_value.tv_nsec = nsec;
|
its.it_value.tv_nsec = nsec;
|
||||||
}
|
|
||||||
|
|
||||||
its.it_interval.tv_sec = 0;
|
its.it_interval.tv_sec = 0;
|
||||||
its.it_interval.tv_nsec = nsec;
|
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 -errno;
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
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)
|
int os_timer_one_shot(unsigned long ticks)
|
||||||
{
|
{
|
||||||
struct itimerspec its;
|
unsigned long long nsec = ticks + 1;
|
||||||
unsigned long long nsec;
|
struct itimerspec its = {
|
||||||
unsigned long sec;
|
.it_value.tv_sec = nsec / UM_NSEC_PER_SEC,
|
||||||
|
.it_value.tv_nsec = nsec % UM_NSEC_PER_SEC,
|
||||||
|
|
||||||
nsec = (ticks + 1);
|
.it_interval.tv_sec = 0,
|
||||||
sec = nsec / UM_NSEC_PER_SEC;
|
.it_interval.tv_nsec = 0, // we cheat here
|
||||||
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
|
|
||||||
|
|
||||||
timer_settime(event_high_res_timer, 0, &its, NULL);
|
timer_settime(event_high_res_timer, 0, &its, NULL);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -135,24 +86,13 @@ int os_timer_one_shot(unsigned long ticks)
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* os_timer_disable() - disable the posix (interval) timer
|
* 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;
|
struct itimerspec its;
|
||||||
|
|
||||||
memset(&its, 0, sizeof(struct itimerspec));
|
memset(&its, 0, sizeof(struct itimerspec));
|
||||||
timer_settime(event_high_res_timer, 0, &its, &its);
|
timer_settime(event_high_res_timer, 0, &its, NULL);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
long long os_nsecs(void)
|
long long os_nsecs(void)
|
||||||
@@ -169,21 +109,14 @@ long long os_nsecs(void)
|
|||||||
*/
|
*/
|
||||||
void os_idle_sleep(unsigned long long nsecs)
|
void os_idle_sleep(unsigned long long nsecs)
|
||||||
{
|
{
|
||||||
struct timespec ts;
|
struct timespec ts = {
|
||||||
|
|
||||||
if (nsecs <= 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ts = ((struct timespec) {
|
|
||||||
.tv_sec = nsecs / UM_NSEC_PER_SEC,
|
.tv_sec = nsecs / UM_NSEC_PER_SEC,
|
||||||
.tv_nsec = nsecs % UM_NSEC_PER_SEC
|
.tv_nsec = nsecs % UM_NSEC_PER_SEC
|
||||||
});
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Relay the signal if clock_nanosleep is interrupted.
|
* 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();
|
deliver_alarm();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user