All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@elte.hu>
To: john stultz <johnstul@us.ibm.com>
Cc: lkml <linux-kernel@vger.kernel.org>,
	Darren Hart <dvhltc@us.ibm.com>,
	Nishanth Aravamudan <nacc@us.ibm.com>,
	Frank Sorenson <frank@tuxrocks.com>,
	George Anzinger <george@mvista.com>,
	Roman Zippel <zippel@linux-m68k.org>,
	Ulrich Windl <ulrich.windl@rz.uni-regensburg.de>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: Re: [PATCH 1/13] Time: Reduced NTP rework (part 1)
Date: Sat, 26 Nov 2005 15:52:43 +0100	[thread overview]
Message-ID: <20051126145243.GC12999@elte.hu> (raw)
In-Reply-To: <20051122013522.18537.97944.sendpatchset@cog.beaverton.ibm.com>


- clean up the impact of timeofday-ntp-part1.patch

Signed-off-by: Ingo Molnar <mingo@elte.hu>

 kernel/timer.c |  138 ++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 83 insertions(+), 55 deletions(-)

Index: linux/kernel/timer.c
===================================================================
--- linux.orig/kernel/timer.c
+++ linux/kernel/timer.c
@@ -623,9 +623,9 @@ static long time_adj;			/* tick adjust (
 long time_reftime;			/* time at last adjustment (s)	*/
 long time_adjust;
 long time_next_adjust;
-long time_adjust_step;	/* per tick time_adjust step */
+long time_adjust_step;			/* per tick time_adjust step */
 
-long total_sppm;	/* shifted ppm sum of all NTP adjustments */
+long total_sppm;			/* shifted ppm sum of all adjustments */
 long offset_adj_ppm;
 long tick_adj_ppm;
 long singleshot_adj_ppm;
@@ -848,8 +848,7 @@ static void second_overflow(void)
 
 
 /**
- * ntp_get_ppm_adjustment - Returns Shifted PPM adjustment
- *
+ * ntp_get_ppm_adjustment - return shifted PPM adjustment
  */
 long ntp_get_ppm_adjustment(void)
 {
@@ -857,41 +856,45 @@ long ntp_get_ppm_adjustment(void)
 }
 
 /**
- * ntp_advance() - increments the NTP state machine
- *
+ * ntp_advance - increments the NTP state machine
+ * @interval_ns: interval, in nanoseconds
  */
 void ntp_advance(unsigned long interval_ns)
 {
 	static unsigned long interval_sum;
+
 	unsigned long flags;
+
 	write_seqlock_irqsave(&ntp_lock, flags);
 
-	/* increment the interval sum */
+	/* increment the interval sum: */
 	interval_sum += interval_ns;
 
-	/* calculate the per tick singleshot adjtime adjustment step */
+	/* calculate the per tick singleshot adjtime adjustment step: */
 	while (interval_ns >= tick_nsec) {
 		time_adjust_step = time_adjust;
 		if (time_adjust_step) {
-	    		/* We are doing an adjtime thing.
-	     		 *
+			/*
+			 * We are doing an adjtime thing.
+			 *
 			 * Prepare time_adjust_step to be within bounds.
 			 * Note that a positive time_adjust means we want
 			 * the clock to run faster.
 			 *
-		    	 * Limit the amount of the step to be in the range
-			 * -tickadj .. +tickadj
+			 * Limit the amount of the step to be in the range
+			 * -tickadj .. +tickadj:
 			 */
-	    		time_adjust_step = min(time_adjust_step, (long)tickadj);
+			time_adjust_step = min(time_adjust_step, (long)tickadj);
 			time_adjust_step = max(time_adjust_step,
 							 (long)-tickadj);
 
-			/* Reduce by this step the amount of time left  */
-		    	time_adjust -= time_adjust_step;
+			/* Reduce by this step the amount of time left: */
+			time_adjust -= time_adjust_step;
 		}
 		interval_ns -= tick_nsec;
 	}
-	singleshot_adj_ppm = time_adjust_step*(1000000/HZ); /* usec/tick => ppm */
+	/* usec/tick => ppm: */
+	singleshot_adj_ppm = time_adjust_step*(1000000/HZ);
 
 	/* Changes by adjtime() do not take effect till next tick. */
 	if (time_next_adjust != 0) {
@@ -904,71 +907,96 @@ void ntp_advance(unsigned long interval_
 		second_overflow();
 	}
 
-	/* calculate the total continuous ppm adjustment */
+	/* calculate the total continuous ppm adjustment: */
 	total_sppm = time_freq; /* already shifted by SHIFT_USEC */
 	total_sppm += offset_adj_ppm << SHIFT_USEC;
 	total_sppm += tick_adj_ppm << SHIFT_USEC;
 	total_sppm += singleshot_adj_ppm << SHIFT_USEC;
 
 	write_sequnlock_irqrestore(&ntp_lock, flags);
+}
+
+#ifdef CONFIG_GENERIC_TIME
+# define update_wall_time(x) do { } while (0)
+#else
+
+/**
+ * phase_advance - advance the phase
+ * @time_adj: adjustment in nsecs
+ *
+ * advance the phase, once it gets to one microsecond advance the tick more.
+ */
+static inline long phase_advance(long time_adj)
+{
+	long delta = 0;
+
+	time_phase += time_adj;
+
+	if ((time_phase >= FINENSEC) || (time_phase <= -FINENSEC)) {
+		delta = shift_right(time_phase, (SHIFT_SCALE - 10));
+		time_phase -= delta << (SHIFT_SCALE - 10);
+	}
+
+	return delta;
+}
+
+/**
+ * xtime_advance - advance xtime
+ * @delta_nsec: adjustment in nsecs
+ */
+static inline void xtime_advance(long delta_nsec)
+{
+	int leapsecond;
+
+	xtime.tv_nsec += delta_nsec;
+	if (likely(xtime.tv_nsec < NSEC_PER_SEC))
+		return;
 
+	xtime.tv_nsec -= NSEC_PER_SEC;
+	xtime.tv_sec++;
+
+	/* process leapsecond: */
+	leapsecond = ntp_leapsecond(xtime);
+	if (likely(!leapsecond))
+		return;
+
+	xtime.tv_sec += leapsecond;
+	wall_to_monotonic.tv_sec -= leapsecond;
+	/*
+	 * Use of time interpolator for a gradual
+	 * change of time:
+	 */
+	time_interpolator_update(leapsecond*NSEC_PER_SEC);
+	clock_was_set();
 }
 
-#ifndef CONFIG_GENERIC_TIME
 /*
  * Using a loop looks inefficient, but "ticks" is
  * usually just one (we shouldn't be losing ticks,
  * we're doing this this way mainly for interrupt
  * latency reasons, not because we think we'll
- * have lots of lost timer ticks
+ * have lots of lost timer ticks)
  */
 static void update_wall_time(unsigned long ticks)
 {
-	long delta_nsec;
-	static long time_phase; /* phase offset (scaled us)	*/
+	static long time_phase; /* phase offset (scaled us) */
 
 	do {
-		ticks--;
-
-		/* Calculate the nsec delta using the
-		 * precomputed NTP adjustments:
-		 *     tick_nsec, time_adjust_step, time_adj
-		 */
-		delta_nsec = tick_nsec + time_adjust_step * 1000;
 		/*
-		 * Advance the phase, once it gets to one microsecond, then
-		 * advance the tick more.
+		 * Calculate the nsec delta using the precomputed NTP
+		 * adjustments:
+		 *     tick_nsec, time_adjust_step, time_adj
 		 */
-		time_phase += time_adj;
-		if ((time_phase >= FINENSEC) || (time_phase <= -FINENSEC)) {
-			long ltemp = shift_right(time_phase,
-							(SHIFT_SCALE - 10));
-			time_phase -= ltemp << (SHIFT_SCALE - 10);
-			delta_nsec += ltemp;
-		}
+		long delta_nsec = tick_nsec + time_adjust_step * 1000;
 
-		xtime.tv_nsec += delta_nsec;
-		if (xtime.tv_nsec >= NSEC_PER_SEC) {
-			int leapsecond;
-			xtime.tv_nsec -= NSEC_PER_SEC;
-			xtime.tv_sec++;
-			/* process leapsecond */
-			leapsecond = ntp_leapsecond(xtime);
-			if (leapsecond) {
-				xtime.tv_sec += leapsecond;
-				wall_to_monotonic.tv_sec -= leapsecond;
-				/* Use of time interpolator for a gradual change of time */
-				time_interpolator_update(leapsecond*NSEC_PER_SEC);
-				clock_was_set();
-			}
-		}
+		delta_nsec += phase_advance();
+
+		xtime_advance(delta_nsec);
 		ntp_advance(tick_nsec);
 		time_interpolator_update(delta_nsec);
 
-	} while (ticks);
+	} while (--ticks);
 }
-#else /* !CONFIG_GENERIC_TIME */
-#define update_wall_time(x)
 #endif /* !CONFIG_GENERIC_TIME */
 
 /*

  parent reply	other threads:[~2005-11-26 14:52 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-22  1:35 [PATCH 0/13] Time: Generic Timeofday Subsystem (v B11) john stultz
2005-11-22  1:35 ` [PATCH 1/13] Time: Reduced NTP rework (part 1) john stultz
2005-11-26 14:52   ` [patch] warn-on-once.patch Ingo Molnar
2005-11-26 15:03     ` Tim Schmielau
2005-11-26 15:03     ` Michal Schmidt
2005-11-26 15:17     ` Ingo Molnar
2005-11-26 15:21       ` Ingo Molnar
2005-11-26 14:52   ` Ingo Molnar [this message]
2005-11-22  1:35 ` [PATCH 2/13] Time: Reduced NTP Rework (part 2) john stultz
2005-11-26 14:53   ` Ingo Molnar
2005-11-22  1:35 ` [PATCH 3/13] Time: Clocksource Infrastructure john stultz
2005-11-26 14:53   ` Ingo Molnar
2005-11-22  1:35 ` [PATCH 4/13] Time: Generic Timekeeping Infrastructure john stultz
2005-11-26 14:54   ` Ingo Molnar
2005-11-22  1:35 ` [PATCH 5/13] Time: i386 Conversion - part 1: Move timer_pit.c to i8253.c john stultz
2005-11-26 14:54   ` Ingo Molnar
2005-11-22  1:35 ` [PATCH 6/13] Time: i386 Conversion - part 2: Move timer_tsc.c to tsc.c john stultz
2005-11-26 14:54   ` Ingo Molnar
2005-11-22  1:36 ` [PATCH 7/13] Time: i386 Conversion - part 3: Rework TSC Support john stultz
2005-11-22  1:36 ` [PATCH 8/13] Time: i386 Conversion - part 4: ACPI PM variable renaming john stultz
2005-11-22  1:36 ` [PATCH 9/13] Time: i386 Conversion - part 5: Enable Generic Timekeeping john stultz
2005-11-26 14:55   ` Ingo Molnar
2005-11-22  1:36 ` [PATCH 10/13] Time: i386 Conversion - part 6: Remove Old Code john stultz
2005-11-22  1:36 ` [PATCH 11/13] Time: x86-64 Conversion to Generic Timekeeping john stultz
2005-11-26 14:55   ` Ingo Molnar
2005-11-26 15:11     ` Ingo Molnar
2005-11-22  1:36 ` [PATCH 12/13] Time: i386/x86-64 Clocksource Drivers john stultz
2005-11-26 14:55   ` Ingo Molnar
2005-11-22  1:36 ` [PATCH 13/13] Time: Generic Timekeeping Paraniod Debug Patch john stultz
2005-11-22  2:03 ` [PATCH 0/13] Time: Generic Timeofday Subsystem (v B11) john stultz
2005-11-26 14:50 ` Ingo Molnar
2005-11-26 14:58   ` Ingo Molnar
  -- strict thread matches above, loose matches on Subject: below --
2005-12-15  2:00 [PATCH 0/13] Time: Generic Timeofday Subsystem (v B14) john stultz
2005-12-15  2:00 ` [PATCH 1/13] Time: Reduced NTP rework (part 1) john stultz
2005-12-06  4:13 [PATCH 0/13] Time: Generic Timeofday Subsystem (v B13) john stultz
2005-12-06  4:13 ` [PATCH 1/13] Time: Reduced NTP rework (part 1) john stultz
2005-12-02  3:25 [PATCH 0/13] Time: Generic Timeofday Subsystem (v B12) john stultz
2005-12-02  3:25 ` [PATCH 1/13] Time: Reduced NTP rework (part 1) john stultz
2005-11-12  4:48 [PATCH 0/13] Time: Generic Timeofday Subsystem (v B10) john stultz
2005-11-12  4:48 ` [PATCH 1/13] Time: Reduced NTP rework (part 1) john stultz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20051126145243.GC12999@elte.hu \
    --to=mingo@elte.hu \
    --cc=dvhltc@us.ibm.com \
    --cc=frank@tuxrocks.com \
    --cc=george@mvista.com \
    --cc=johnstul@us.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nacc@us.ibm.com \
    --cc=tglx@linutronix.de \
    --cc=ulrich.windl@rz.uni-regensburg.de \
    --cc=zippel@linux-m68k.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.