ntp: Add ADJ_SETOFFSET mode bit
This patch adds a new mode bit into the timex structure. When set, the bit instructs the kernel to add the given time value to the current time. Signed-off-by: Richard Cochran <richard.cochran@omicron.at> Acked-by: John Stultz <johnstul@us.ibm.com> LKML-Reference: <20110201134320.688829863@linutronix.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
		
					parent
					
						
							
								c528f7c6c2
							
						
					
				
			
			
				commit
				
					
						094aa1881f
					
				
			
		
					 2 changed files with 13 additions and 1 deletions
				
			
		|  | @ -73,7 +73,7 @@ struct timex { | ||||||
| 	long tolerance;		/* clock frequency tolerance (ppm)
 | 	long tolerance;		/* clock frequency tolerance (ppm)
 | ||||||
| 				 * (read only) | 				 * (read only) | ||||||
| 				 */ | 				 */ | ||||||
| 	struct timeval time;	/* (read only) */ | 	struct timeval time;	/* (read only, except for ADJ_SETOFFSET) */ | ||||||
| 	long tick;		/* (modified) usecs between clock ticks */ | 	long tick;		/* (modified) usecs between clock ticks */ | ||||||
| 
 | 
 | ||||||
| 	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */ | 	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */ | ||||||
|  | @ -102,6 +102,7 @@ struct timex { | ||||||
| #define ADJ_STATUS		0x0010	/* clock status */ | #define ADJ_STATUS		0x0010	/* clock status */ | ||||||
| #define ADJ_TIMECONST		0x0020	/* pll time constant */ | #define ADJ_TIMECONST		0x0020	/* pll time constant */ | ||||||
| #define ADJ_TAI			0x0080	/* set TAI offset */ | #define ADJ_TAI			0x0080	/* set TAI offset */ | ||||||
|  | #define ADJ_SETOFFSET		0x0100  /* add 'time' to current time */ | ||||||
| #define ADJ_MICRO		0x1000	/* select microsecond resolution */ | #define ADJ_MICRO		0x1000	/* select microsecond resolution */ | ||||||
| #define ADJ_NANO		0x2000	/* select nanosecond resolution */ | #define ADJ_NANO		0x2000	/* select nanosecond resolution */ | ||||||
| #define ADJ_TICK		0x4000	/* tick value */ | #define ADJ_TICK		0x4000	/* tick value */ | ||||||
|  |  | ||||||
|  | @ -648,6 +648,17 @@ int do_adjtimex(struct timex *txc) | ||||||
| 			hrtimer_cancel(&leap_timer); | 			hrtimer_cancel(&leap_timer); | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
|  | 	if (txc->modes & ADJ_SETOFFSET) { | ||||||
|  | 		struct timespec delta; | ||||||
|  | 		if ((unsigned long)txc->time.tv_usec >= NSEC_PER_SEC) | ||||||
|  | 			return -EINVAL; | ||||||
|  | 		delta.tv_sec  = txc->time.tv_sec; | ||||||
|  | 		delta.tv_nsec = txc->time.tv_usec; | ||||||
|  | 		if (!(txc->modes & ADJ_NANO)) | ||||||
|  | 			delta.tv_nsec *= 1000; | ||||||
|  | 		timekeeping_inject_offset(&delta); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	getnstimeofday(&ts); | 	getnstimeofday(&ts); | ||||||
| 
 | 
 | ||||||
| 	write_seqlock_irq(&xtime_lock); | 	write_seqlock_irq(&xtime_lock); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Richard Cochran
				Richard Cochran