diff options
| -rw-r--r-- | include/linux/time.h | 3 | ||||
| -rw-r--r-- | kernel/hrtimer.c | 9 | ||||
| -rw-r--r-- | kernel/time/timekeeping.c | 5 | 
3 files changed, 11 insertions, 6 deletions
diff --git a/include/linux/time.h b/include/linux/time.h index 9072df83de1..a57e0f67b3d 100644 --- a/include/linux/time.h +++ b/include/linux/time.h @@ -126,7 +126,8 @@ extern int timekeeping_suspended;  unsigned long get_seconds(void);  struct timespec current_kernel_time(void); -struct timespec __current_kernel_time(void); /* does not hold xtime_lock */ +struct timespec __current_kernel_time(void); /* does not take xtime_lock */ +struct timespec __get_wall_to_monotonic(void); /* does not take xtime_lock */  struct timespec get_monotonic_coarse(void);  #define CURRENT_TIME		(current_kernel_time()) diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 5c69e996bd0..809f48c7055 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c @@ -90,7 +90,7 @@ static void hrtimer_get_softirq_time(struct hrtimer_cpu_base *base)  	do {  		seq = read_seqbegin(&xtime_lock);  		xts = __current_kernel_time(); -		tom = wall_to_monotonic; +		tom = __get_wall_to_monotonic();  	} while (read_seqretry(&xtime_lock, seq));  	xtim = timespec_to_ktime(xts); @@ -612,7 +612,7 @@ static int hrtimer_reprogram(struct hrtimer *timer,  static void retrigger_next_event(void *arg)  {  	struct hrtimer_cpu_base *base; -	struct timespec realtime_offset; +	struct timespec realtime_offset, wtm;  	unsigned long seq;  	if (!hrtimer_hres_active()) @@ -620,10 +620,9 @@ static void retrigger_next_event(void *arg)  	do {  		seq = read_seqbegin(&xtime_lock); -		set_normalized_timespec(&realtime_offset, -					-wall_to_monotonic.tv_sec, -					-wall_to_monotonic.tv_nsec); +		wtm = __get_wall_to_monotonic();  	} while (read_seqretry(&xtime_lock, seq)); +	set_normalized_timespec(&realtime_offset, -wtm.tv_sec, -wtm.tv_nsec);  	base = &__get_cpu_var(hrtimer_bases); diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index b15c3acafd5..fb61c2ed366 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -858,6 +858,11 @@ struct timespec __current_kernel_time(void)  	return xtime;  } +struct timespec __get_wall_to_monotonic(void) +{ +	return wall_to_monotonic; +} +  struct timespec current_kernel_time(void)  {  	struct timespec now;  |