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

Commit 314ac371 authored by John Stultz's avatar John Stultz
Browse files

time: Extend get_xtime_and_monotonic_offset() to also return sleep



Extend get_xtime_and_monotonic_offset to
get_xtime_and_monotonic_and_sleep_offset().

CC: Jamie Lokier <jamie@shareable.org>
CC: Thomas Gleixner <tglx@linutronix.de>
CC: Alexander Shishkin <virtuoso@slind.org>
CC: Arve Hjønnevåg <arve@android.com>
Signed-off-by: default avatarJohn Stultz <john.stultz@linaro.org>
parent abb3a4ea
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -124,7 +124,8 @@ unsigned long get_seconds(void);
struct timespec current_kernel_time(void);
struct timespec current_kernel_time(void);
struct timespec __current_kernel_time(void); /* does not take xtime_lock */
struct timespec __current_kernel_time(void); /* does not take xtime_lock */
struct timespec get_monotonic_coarse(void);
struct timespec get_monotonic_coarse(void);
void get_xtime_and_monotonic_offset(struct timespec *xtim, struct timespec *wtom);
void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
				struct timespec *wtom, struct timespec *sleep);


#define CURRENT_TIME		(current_kernel_time())
#define CURRENT_TIME		(current_kernel_time())
#define CURRENT_TIME_SEC	((struct timespec) { get_seconds(), 0 })
#define CURRENT_TIME_SEC	((struct timespec) { get_seconds(), 0 })
+5 −4
Original line number Original line Diff line number Diff line
@@ -91,9 +91,9 @@ static inline int hrtimer_clockid_to_base(clockid_t clock_id)
static void hrtimer_get_softirq_time(struct hrtimer_cpu_base *base)
static void hrtimer_get_softirq_time(struct hrtimer_cpu_base *base)
{
{
	ktime_t xtim, tomono;
	ktime_t xtim, tomono;
	struct timespec xts, tom;
	struct timespec xts, tom, slp;


	get_xtime_and_monotonic_offset(&xts, &tom);
	get_xtime_and_monotonic_and_sleep_offset(&xts, &tom, &slp);


	xtim = timespec_to_ktime(xts);
	xtim = timespec_to_ktime(xts);
	tomono = timespec_to_ktime(tom);
	tomono = timespec_to_ktime(tom);
@@ -614,12 +614,13 @@ static int hrtimer_reprogram(struct hrtimer *timer,
static void retrigger_next_event(void *arg)
static void retrigger_next_event(void *arg)
{
{
	struct hrtimer_cpu_base *base;
	struct hrtimer_cpu_base *base;
	struct timespec realtime_offset, wtm;
	struct timespec realtime_offset, wtm, sleep;


	if (!hrtimer_hres_active())
	if (!hrtimer_hres_active())
		return;
		return;


	get_xtime_and_monotonic_offset(&realtime_offset, &wtm);
	get_xtime_and_monotonic_and_sleep_offset(&realtime_offset, &wtm,
							&sleep);
	set_normalized_timespec(&realtime_offset, -wtm.tv_sec, -wtm.tv_nsec);
	set_normalized_timespec(&realtime_offset, -wtm.tv_sec, -wtm.tv_nsec);


	base = &__get_cpu_var(hrtimer_bases);
	base = &__get_cpu_var(hrtimer_bases);
+6 −2
Original line number Original line Diff line number Diff line
@@ -1040,11 +1040,14 @@ void do_timer(unsigned long ticks)
}
}


/**
/**
 * get_xtime_and_monotonic_offset() - get xtime and wall_to_monotonic
 * get_xtime_and_monotonic_and_sleep_offset() - get xtime, wall_to_monotonic,
 *    and sleep offsets.
 * @xtim:	pointer to timespec to be set with xtime
 * @xtim:	pointer to timespec to be set with xtime
 * @wtom:	pointer to timespec to be set with wall_to_monotonic
 * @wtom:	pointer to timespec to be set with wall_to_monotonic
 * @sleep:	pointer to timespec to be set with time in suspend
 */
 */
void get_xtime_and_monotonic_offset(struct timespec *xtim, struct timespec *wtom)
void get_xtime_and_monotonic_and_sleep_offset(struct timespec *xtim,
				struct timespec *wtom, struct timespec *sleep)
{
{
	unsigned long seq;
	unsigned long seq;


@@ -1052,6 +1055,7 @@ void get_xtime_and_monotonic_offset(struct timespec *xtim, struct timespec *wtom
		seq = read_seqbegin(&xtime_lock);
		seq = read_seqbegin(&xtime_lock);
		*xtim = xtime;
		*xtim = xtime;
		*wtom = wall_to_monotonic;
		*wtom = wall_to_monotonic;
		*sleep = total_sleep_time;
	} while (read_seqretry(&xtime_lock, seq));
	} while (read_seqretry(&xtime_lock, seq));
}
}