History

[PATCH] NTP: Move all the NTP related code to ntp.c

Move all the NTP related code to ntp.c [akpm@osdl.org: cleanups, build fix] Signed-off-by: John Stultz <johnstul@us.ibm.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Roman Zippel <zippel@linux-m68k.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>

john stultz committed 20 years ago

Commit 4c7ee8d1 parent c902e0a5 files · +399 −386Browse files

Showing the changes to kernel/timer.c (1 of 5 files). Show all

Unified · Split

kernel/timer.c+1−210
@@ -41,12 +41,6 @@ · 40 unmodified lines
4141 #include <asm/timex.h>
4242 #include <asm/io.h>
4343
44−#ifdef CONFIG_TIME_INTERPOLATION
45−static void time_interpolator_update(long delta_nsec);
46−#else
47−#define time_interpolator_update(x)
48−#endif
49−
5044 u64 jiffies_64 __cacheline_aligned_in_smp = INITIAL_JIFFIES;
5145
5246 EXPORT_SYMBOL(jiffies_64);
@@ -587,209 +581,6 @@ struct timespec wall_to_monotonic __attribute__ ((aligned (16))); · 534 unmodified lines
587581
588582 EXPORT_SYMBOL(xtime);
589583
590−/* Don't completely fail for HZ > 500. */
591−int tickadj = 500/HZ ? : 1; /* microsecs */
592−
593−
594−/*
595− * phase-lock loop variables
596− */
597−/* TIME_ERROR prevents overwriting the CMOS clock */
598−int time_state = TIME_OK; /* clock synchronization status */
599−int time_status = STA_UNSYNC; /* clock status bits */
600−long time_offset; /* time adjustment (us) */
601−long time_constant = 2; /* pll time constant */
602−long time_tolerance = MAXFREQ; /* frequency tolerance (ppm) */
603−long time_precision = 1; /* clock precision (us) */
604−long time_maxerror = NTP_PHASE_LIMIT; /* maximum error (us) */
605−long time_esterror = NTP_PHASE_LIMIT; /* estimated error (us) */
606−long time_freq = (((NSEC_PER_SEC + HZ/2) % HZ - HZ/2) << SHIFT_USEC) / NSEC_PER_USEC;
607− /* frequency offset (scaled ppm)*/
608−static long time_adj; /* tick adjust (scaled 1 / HZ) */
609−long time_reftime; /* time at last adjustment (s) */
610−long time_adjust;
611−long time_next_adjust;
612−
613−/*
614− * this routine handles the overflow of the microsecond field
615− *
616− * The tricky bits of code to handle the accurate clock support
617− * were provided by Dave Mills (Mills@UDEL.EDU) of NTP fame.
618− * They were originally developed for SUN and DEC kernels.
619− * All the kudos should go to Dave for this stuff.
620− *
621− */
622−static void second_overflow(void)
623−{
624− long ltemp;
625−
626− /* Bump the maxerror field */
627− time_maxerror += time_tolerance >> SHIFT_USEC;
628− if (time_maxerror > NTP_PHASE_LIMIT) {
629− time_maxerror = NTP_PHASE_LIMIT;
630− time_status |= STA_UNSYNC;
631− }
632−
633− /*
634− * Leap second processing. If in leap-insert state at the end of the
635− * day, the system clock is set back one second; if in leap-delete
636− * state, the system clock is set ahead one second. The microtime()
637− * routine or external clock driver will insure that reported time is
638− * always monotonic. The ugly divides should be replaced.
639− */
640− switch (time_state) {
641− case TIME_OK:
642− if (time_status & STA_INS)
643− time_state = TIME_INS;
644− else if (time_status & STA_DEL)
645− time_state = TIME_DEL;
646− break;
647− case TIME_INS:
648− if (xtime.tv_sec % 86400 == 0) {
649− xtime.tv_sec--;
650− wall_to_monotonic.tv_sec++;
651− /*
652− * The timer interpolator will make time change
653− * gradually instead of an immediate jump by one second
654− */
655− time_interpolator_update(-NSEC_PER_SEC);
656− time_state = TIME_OOP;
657− clock_was_set();
658− printk(KERN_NOTICE "Clock: inserting leap second "
659− "23:59:60 UTC\n");
660− }
661− break;
662− case TIME_DEL:
663− if ((xtime.tv_sec + 1) % 86400 == 0) {
664− xtime.tv_sec++;
665− wall_to_monotonic.tv_sec--;
666− /*
667− * Use of time interpolator for a gradual change of
668− * time
669− */
670− time_interpolator_update(NSEC_PER_SEC);
671− time_state = TIME_WAIT;
672− clock_was_set();
673− printk(KERN_NOTICE "Clock: deleting leap second "
674− "23:59:59 UTC\n");
675− }
676− break;
677− case TIME_OOP:
678− time_state = TIME_WAIT;
679− break;
680− case TIME_WAIT:
681− if (!(time_status & (STA_INS | STA_DEL)))
682− time_state = TIME_OK;
683− }
684−
685− /*
686− * Compute the phase adjustment for the next second. In PLL mode, the
687− * offset is reduced by a fixed factor times the time constant. In FLL
688− * mode the offset is used directly. In either mode, the maximum phase
689− * adjustment for each second is clamped so as to spread the adjustment
690− * over not more than the number of seconds between updates.
691− */
692− ltemp = time_offset;
693− if (!(time_status & STA_FLL))
694− ltemp = shift_right(ltemp, SHIFT_KG + time_constant);
695− ltemp = min(ltemp, (MAXPHASE / MINSEC) << SHIFT_UPDATE);
696− ltemp = max(ltemp, -(MAXPHASE / MINSEC) << SHIFT_UPDATE);
697− time_offset -= ltemp;
698− time_adj = ltemp << (SHIFT_SCALE - SHIFT_HZ - SHIFT_UPDATE);
699−
700− /*
701− * Compute the frequency estimate and additional phase adjustment due
702− * to frequency error for the next second.
703− */
704− ltemp = time_freq;
705− time_adj += shift_right(ltemp,(SHIFT_USEC + SHIFT_HZ - SHIFT_SCALE));
706−
707−#if HZ == 100
708− /*
709− * Compensate for (HZ==100) != (1 << SHIFT_HZ). Add 25% and 3.125% to
710− * get 128.125; => only 0.125% error (p. 14)
711− */
712− time_adj += shift_right(time_adj, 2) + shift_right(time_adj, 5);
713−#endif
714−#if HZ == 250
715− /*
716− * Compensate for (HZ==250) != (1 << SHIFT_HZ). Add 1.5625% and
717− * 0.78125% to get 255.85938; => only 0.05% error (p. 14)
718− */
719− time_adj += shift_right(time_adj, 6) + shift_right(time_adj, 7);
720−#endif
721−#if HZ == 1000
722− /*
723− * Compensate for (HZ==1000) != (1 << SHIFT_HZ). Add 1.5625% and
724− * 0.78125% to get 1023.4375; => only 0.05% error (p. 14)
725− */
726− time_adj += shift_right(time_adj, 6) + shift_right(time_adj, 7);
727−#endif
728−}
729−
730−/*
731− * Returns how many microseconds we need to add to xtime this tick
732− * in doing an adjustment requested with adjtime.
733− */
734−static long adjtime_adjustment(void)
735−{
736− long time_adjust_step;
737−
738− time_adjust_step = time_adjust;
739− if (time_adjust_step) {
740− /*
741− * We are doing an adjtime thing. Prepare time_adjust_step to
742− * be within bounds. Note that a positive time_adjust means we
743− * want the clock to run faster.
744− *
745− * Limit the amount of the step to be in the range
746− * -tickadj .. +tickadj
747− */
748− time_adjust_step = min(time_adjust_step, (long)tickadj);
749− time_adjust_step = max(time_adjust_step, (long)-tickadj);
750− }
751− return time_adjust_step;
752−}
753−
754−/* in the NTP reference this is called "hardclock()" */
755−static void update_ntp_one_tick(void)
756−{
757− long time_adjust_step;
758−
759− time_adjust_step = adjtime_adjustment();
760− if (time_adjust_step)
761− /* Reduce by this step the amount of time left */
762− time_adjust -= time_adjust_step;
763−
764− /* Changes by adjtime() do not take effect till next tick. */
765− if (time_next_adjust != 0) {
766− time_adjust = time_next_adjust;
767− time_next_adjust = 0;
768− }
769−}
770−
771−/*
772− * Return how long ticks are at the moment, that is, how much time
773− * update_wall_time_one_tick will add to xtime next time we call it
774− * (assuming no calls to do_adjtimex in the meantime).
775− * The return value is in fixed-point nanoseconds shifted by the
776− * specified number of bits to the right of the binary point.
777− * This function has no side-effects.
778− */
779−u64 current_tick_length(void)
780−{
781− long delta_nsec;
782− u64 ret;
783−
784− /* calculate the finest interval NTP will allow.
785− * ie: nanosecond value shifted by (SHIFT_SCALE - 10)
786− */
787− delta_nsec = tick_nsec + adjtime_adjustment() * 1000;
788− ret = (u64)delta_nsec << TICK_LENGTH_SHIFT;
789− ret += (s64)time_adj << (TICK_LENGTH_SHIFT - (SHIFT_SCALE - 10));
790−
791− return ret;
792−}
793584
794585 /* XXX - all of this timekeeping code should be later moved to time.c */
795586 #include <linux/clocksource.h>
@@ -1775,7 +1566,7 @@ unsigned long time_interpolator_get_offset(void) · 979 unmodified lines
17751566 #define INTERPOLATOR_ADJUST 65536
17761567 #define INTERPOLATOR_MAX_SKIP 10*INTERPOLATOR_ADJUST
17771568
1778−static void time_interpolator_update(long delta_nsec)
1569+void time_interpolator_update(long delta_nsec)
17791570 {
17801571 u64 counter;
17811572 unsigned long offset;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t