 868a3e915f
			
		
	
	
	868a3e915f
	
	
	
		
			
			On every tick/hrtimer interrupt we update the offset variables of the clock bases. That's silly because these offsets change very seldom. Add a sequence counter to the time keeping code which keeps track of the offset updates (clock_was_set()). Have a sequence cache in the hrtimer cpu bases to evaluate whether the offsets must be updated or not. This allows us later to avoid pointless cacheline pollution. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Preeti U Murthy <preeti@linux.vnet.ibm.com> Acked-by: Peter Zijlstra <peterz@infradead.org> Cc: Viresh Kumar <viresh.kumar@linaro.org> Cc: Marcelo Tosatti <mtosatti@redhat.com> Cc: Frederic Weisbecker <fweisbec@gmail.com> Cc: John Stultz <john.stultz@linaro.org> Link: http://lkml.kernel.org/r/20150414203501.132820245@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: John Stultz <john.stultz@linaro.org>
		
			
				
	
	
		
			26 lines
		
	
	
	
		
			740 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			26 lines
		
	
	
	
		
			740 B
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _KERNEL_TIME_TIMEKEEPING_H
 | |
| #define _KERNEL_TIME_TIMEKEEPING_H
 | |
| /*
 | |
|  * Internal interfaces for kernel/time/
 | |
|  */
 | |
| extern ktime_t ktime_get_update_offsets_now(unsigned int *cwsseq,
 | |
| 					    ktime_t *offs_real,
 | |
| 					    ktime_t *offs_boot,
 | |
| 					    ktime_t *offs_tai);
 | |
| 
 | |
| extern int timekeeping_valid_for_hres(void);
 | |
| extern u64 timekeeping_max_deferment(void);
 | |
| extern int timekeeping_inject_offset(struct timespec *ts);
 | |
| extern s32 timekeeping_get_tai_offset(void);
 | |
| extern void timekeeping_set_tai_offset(s32 tai_offset);
 | |
| extern int timekeeping_suspend(void);
 | |
| extern void timekeeping_resume(void);
 | |
| 
 | |
| extern void do_timer(unsigned long ticks);
 | |
| extern void update_wall_time(void);
 | |
| 
 | |
| extern seqlock_t jiffies_lock;
 | |
| 
 | |
| #define CS_NAME_LEN	32
 | |
| 
 | |
| #endif
 |