Move NTP related code to ntp.c
RFC 1/1 Move NTP related code to ntp.c
Hey all,
I know I've been moving a bit slowly, but I wanted to get my current
tree out there so folks could see where I'm heading w/ the timekeeping code now that the largest chunk of logical changes has landed.
You can find the current version (C3 against 2.6.18-rc1) of the timekeeping tree here: http://sr71.net/~jstultz/tod/
Basically it consists of a few cleanup patches, a paranoid debug patch, and the x86-64 and ppc conversion patches as well.
On the TODO list:
o Breakup the x86-64 patch and get it -mm bound.
o ia64 patch from Peter Keilty in the works
o I need to dig up the ARM patches that hit the list awhile back.
o Rewrite the ktime_t interfaces patch.
Anyway, here is the first of those cleanups I'd like to push soon-ish. It just simply moves all of the NTP related code and interfaces from kernel/timer.c and kernel/time.c into kernel/time/ntp.c. There is still a bunch of NTP cleanups to be done to the code (Now that we have decent interfaces we can static the global variables, make do_adjtimex readable, etc), but this is the first step.
Roman: I know you had some larger NTP changes (getting rid of update_ntp_one_tick() for second-interval adjustments, etc). Are they still around?
Anyway, comments or feedback would be appreciated.
thanks
-john
include/linux/timex.h | 2 kernel/time.c | 173 --------------------- kernel/time/Makefile | 2 kernel/time/ntp.c | 396 ++++++++++++++++++++++++++++++++++++++++++++++++++ kernel/timer.c | 203 ------------------------- 5 files changed, 399 insertions(+), 377 deletions(-)
linux-2.6.18-rc1_timeofday-ntp-cleanup_C3.patch
============================================
include/linux/timex.h +2 -0
@@ -308,6 +308,8 @@ time_interpolator_reset(void)/* Returns how long ticks are at present, in ns / 2^(SHIFT_SCALE-10). */ extern u64 current_tick_length (void ); +extern void second_overflow (void ); +extern void update_ntp_one_tick (void );extern int do_adjtimex (struct timex *);#endif /* KERNEL */
kernel/time.c +0 -173
179 lines not on this page · raw message
kernel/time/Makefile +1 -1
@@ -1 +1 @@ -obj-y += clocksource.o jiffies.o +obj-y += ntp.o clocksource.o jiffies.o
kernel/time/ntp.c new file +396 -0
396 lines not on this page · raw message
kernel/timer.c +0 -203
209 lines not on this page · raw message
RFC PATCH 1/1 Kill i386 references to xtime
All,
Just another cleanup patch from the C3 timekeeping tree (which you can
find here: http://sr71.net/~jstultz/tod/ ) I wanted to RFC.
This patch kills all xtime references in i386 and replaces them with proper settimeofday()/gettimeofday() calls.
I'm not sure the APM changes are 100% right, as that code is very muddled (take the i8253_lock before calling reinit_timer, which would take the i8253_lock again and hang if it weren't ifdef'ed out!).
Anyway, testing, feedback or comments would be appreciated!
thanks
-john
apm.c | 17 +++++------------ time.c | 26 +++++++++++++++----------- 2 files changed, 20 insertions(+), 23 deletions(-)
linux-2.6.18-rc1_timeofday-i386-xtime-removal_C3.patch
============================================
arch/i386/kernel/apm.c +5 -12
@@ -1154,9 +1154,11 @@ out:static void set_time (void ) { +struct timespec ts;if (got_clock_diff) {/* Must know time zone in order to set clock */ - xtime.tv_sec =get_cmos_time () + clock_cmos_diff; - xtime.tv_nsec =0 ; + ts.tv_sec =get_cmos_time () + clock_cmos_diff; + ts.tv_nsec =0 ; +do_settimeofday (&ts); } }
@@ -1232,13 +1234,8 @@ static int suspend(int vetoable)restore_processor_state ();local_irq_disable (); -write_seqlock (&xtime_lock); -spin_lock (&i8253_lock); -reinit_timer ();set_time (); - -spin_unlock (&i8253_lock); -write_sequnlock (&xtime_lock); +reinit_timer ();if (err ==APM_NO_ERROR ) err =APM_SUCCESS ;
@@ -1365,9 +1362,7 @@ static void check_events(void) ignore_bounce =1 ;if ((event !=APM_NORMAL_RESUME ) || (ignore_normal_resume ==0 )) { -write_seqlock_irq (&xtime_lock);set_time (); -write_sequnlock_irq (&xtime_lock);device_resume ();pm_send_all (PM_RESUME , (void *)0 );queue_event (event,NULL );
@@ -1383,9 +1378,7 @@ static void check_events(void)break ;case APM_UPDATE_TIME : -write_seqlock_irq (&xtime_lock);set_time (); -write_sequnlock_irq (&xtime_lock);break ;case APM_CRITICAL_SUSPEND :
arch/i386/kernel/time.c +15 -11
@@ -288,7 +288,7 @@ static int timer_resume(struct sys_devicunsigned long flags;unsigned long sec;unsigned long sleep_length; - +struct timespec ts;#ifdef CONFIG_HPET_TIMER if (is_hpet_enabled ())hpet_reenable ();
@@ -296,9 +296,11 @@ static int timer_resume(struct sys_devicsetup_pit_timer (); sec =get_cmos_time () + clock_cmos_diff; sleep_length = (get_cmos_time () - sleep_start) *HZ ; + + ts.tv_sec = sec; + ts.tv_nsec =0 ; +do_settimeofday (&ts);write_seqlock_irqsave (&xtime_lock, flags); - xtime.tv_sec = sec; - xtime.tv_nsec =0 ; jiffies_64 += sleep_length; wall_jiffies += sleep_length;write_sequnlock_irqrestore (&xtime_lock, flags);
@@ -334,10 +336,11 @@ extern void (*late_time_init)(void);/* Duplicate of time_init() below, with hpet_enable part added */ static void __init hpet_time_init (void ) { - xtime.tv_sec =get_cmos_time (); - xtime.tv_nsec = (INITIAL_JIFFIES %HZ ) * (NSEC_PER_SEC /HZ ); -set_normalized_timespec (&wall_to_monotonic, - -xtime.tv_sec, -xtime.tv_nsec); +struct timespec ts; + ts.tv_sec =get_cmos_time (); + ts.tv_nsec = (INITIAL_JIFFIES %HZ ) * (NSEC_PER_SEC /HZ ); + +do_settimeofday (&ts);if ((hpet_enable () >=0 ) && hpet_use_timer) {printk ("Using HPET for base-timer\n" );
@@ -349,6 +352,7 @@ static void __init hpet_time_init(void)void __init time_init (void ) { +struct timespec ts;#ifdef CONFIG_HPET_TIMER if (is_hpet_capable ()) {/*
@@ -359,10 +363,10 @@ void __init time_init(void) return; }#endif - xtime.tv_sec =get_cmos_time (); - xtime.tv_nsec = (INITIAL_JIFFIES %HZ ) * (NSEC_PER_SEC /HZ ); -set_normalized_timespec (&wall_to_monotonic, - -xtime.tv_sec, -xtime.tv_nsec); + ts.tv_sec =get_cmos_time (); + ts.tv_nsec = (INITIAL_JIFFIES %HZ ) * (NSEC_PER_SEC /HZ ); + +do_settimeofday (&ts);time_init_hook (); }
Re: [RFC][PATCH] Kill i386 references to xtime
Quoted 10 lines · john stultz
All,
Just another cleanup patch from the C3 timekeeping tree (which you can
find here: http://sr71.net/~jstultz/tod/ ) I wanted to RFC.This patch kills all xtime references in i386 and replaces them with proper settimeofday()/gettimeofday() calls.
I'm not sure the APM changes are 100% right, as that code is very muddled (take the
i8253_lockbefore callingreinit_timer, which would take thei8253_lockagain and hang if it weren't ifdef'ed out!).
yeah, that code looks very suspect.
Quoted 1 line
Anyway, testing, feedback or comments would be appreciated!
These cleanups look good to me. I gave your patch a testrun on a lockdep-enabled allyesconfig bzImage kernel on i686, and there are no apprent problems - it booted up just fine.
Ingo
Quoted 4 lines · john stultz
Hey all,
I know I've been moving a bit slowly, but I wanted to get my current
tree out there so folks could see where I'm heading w/ the timekeeping code now that the largest chunk of logical changes has landed.
looks good to me! A few minor nits:
Quoted 1 line
+ * This code was mainly moved from
kernel/timer.candkerenl/time.c
s/kerenl/kernel
Quoted 1 line
+ * Please see those files for relavent copyright info and historical
s/relavent/relevant
Quoted 9 lines
+/*
+ * this routine handles the overflow of the microsecond field
+ *
+ * The tricky bits of code to handle the accurate clock support
+ * were provided by Dave Mills ([email protected]) of NTP fame.
+ * They were originally developed for SUN and DEC kernels.
+ * All the kudos should go to Dave for this stuff.
+ *
+ */
remove the extra empty ' *' line above.
kernel/time/ntp.c line 238
Quoted 6 lines
kernel/time/ntp.c new file +6
-0+/* adjtimex mainly allows reading (and writing, if superuser) of +* kernel time-keeping variables. used by xntpd. +*/ +int do_adjtimex (struct timex *txc) +{ +long ltemp, mtemp, save_adjust;
whitespace damage.
suggestion for future cleanups: this function (do_adjtimex()) should be cleaned up further to conform to the kernel coding style standard. (currently it has 4-space tabs, etc.) I did that before - maybe some of those cleanups still apply?
[obviously that cleanup shouldnt be part of this move-the-code patch.]
Ingo
Hi,
Quoted 3 lines · john stultz
Roman: I know you had some larger NTP changes (getting rid of
update_ntp_one_tick()for second-interval adjustments, etc). Are they still around?
I updated them and currently test them, so please hold back with larger reformating changes, otherwise the patch looks fine.
bye, Roman