mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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)
 | 
			
		||||
				 * (read only)
 | 
			
		||||
				 */
 | 
			
		||||
	struct timeval time;	/* (read only) */
 | 
			
		||||
	struct timeval time;	/* (read only, except for ADJ_SETOFFSET) */
 | 
			
		||||
	long tick;		/* (modified) usecs between clock ticks */
 | 
			
		||||
 | 
			
		||||
	long ppsfreq;           /* pps frequency (scaled ppm) (ro) */
 | 
			
		||||
| 
						 | 
				
			
			@ -102,6 +102,7 @@ struct timex {
 | 
			
		|||
#define ADJ_STATUS		0x0010	/* clock status */
 | 
			
		||||
#define ADJ_TIMECONST		0x0020	/* pll time constant */
 | 
			
		||||
#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_NANO		0x2000	/* select nanosecond resolution */
 | 
			
		||||
#define ADJ_TICK		0x4000	/* tick value */
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -648,6 +648,17 @@ int do_adjtimex(struct timex *txc)
 | 
			
		|||
			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);
 | 
			
		||||
 | 
			
		||||
	write_seqlock_irq(&xtime_lock);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue