Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c7c6f3b9 authored by Johannes Berg's avatar Johannes Berg Committed by Richard Weinberger
Browse files

um: Pass nsecs to os timer functions



This makes the code clearer and lets the time travel patch have
the actual time used for these functions in just one place.

Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
parent b00bdd32
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -251,8 +251,8 @@ extern void os_warn(const char *fmt, ...)
/* time.c */
extern void os_idle_sleep(unsigned long long nsecs);
extern int os_timer_create(void);
extern int os_timer_set_interval(void);
extern int os_timer_one_shot(unsigned long ticks);
extern int os_timer_set_interval(unsigned long long nsecs);
extern int os_timer_one_shot(unsigned long long nsecs);
extern void os_timer_disable(void);
extern void uml_idle_timer(void);
extern long long os_persistent_clock_emulation(void);
+2 −2
Original line number Diff line number Diff line
@@ -37,14 +37,14 @@ static int itimer_shutdown(struct clock_event_device *evt)

static int itimer_set_periodic(struct clock_event_device *evt)
{
	os_timer_set_interval();
	os_timer_set_interval(NSEC_PER_SEC / HZ);
	return 0;
}

static int itimer_next_event(unsigned long delta,
			     struct clock_event_device *evt)
{
	return os_timer_one_shot(delta);
	return os_timer_one_shot(delta + 1);
}

static int itimer_one_shot(struct clock_event_device *evt)
+8 −12
Original line number Diff line number Diff line
@@ -50,18 +50,15 @@ int os_timer_create(void)
	return 0;
}

int os_timer_set_interval(void)
int os_timer_set_interval(unsigned long long nsecs)
{
	struct itimerspec its;
	unsigned long long nsec;

	nsec = UM_NSEC_PER_SEC / UM_HZ;
	its.it_value.tv_sec = nsecs / UM_NSEC_PER_SEC;
	its.it_value.tv_nsec = nsecs % UM_NSEC_PER_SEC;

	its.it_value.tv_sec = 0;
	its.it_value.tv_nsec = nsec;

	its.it_interval.tv_sec = 0;
	its.it_interval.tv_nsec = nsec;
	its.it_interval.tv_sec = nsecs / UM_NSEC_PER_SEC;
	its.it_interval.tv_nsec = nsecs % UM_NSEC_PER_SEC;

	if (timer_settime(event_high_res_timer, 0, &its, NULL) == -1)
		return -errno;
@@ -69,12 +66,11 @@ int os_timer_set_interval(void)
	return 0;
}

int os_timer_one_shot(unsigned long ticks)
int os_timer_one_shot(unsigned long long nsecs)
{
	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,
		.it_value.tv_sec = nsecs / UM_NSEC_PER_SEC,
		.it_value.tv_nsec = nsecs % UM_NSEC_PER_SEC,

		.it_interval.tv_sec = 0,
		.it_interval.tv_nsec = 0, // we cheat here