From: Andrew Morton - All implementations can be __devinit - The function prototypes were in asm/timex.h but they all must be the same, so create a single declaration in linux/timex.h. - uninline the sparc64 version to match the other architectures - Don't bother #defining ARCH_HAS_READ_CURRENT_TIMER to a particular value. Cc: "David S. Miller" Cc: Haavard Skinnemoen Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Andi Kleen Signed-off-by: Andrew Morton --- arch/avr32/lib/delay.c | 4 +++- arch/sparc64/kernel/time.c | 5 +++++ arch/x86/lib/delay_32.c | 4 +++- arch/x86/lib/delay_64.c | 4 +++- include/asm-avr32/timex.h | 3 +-- include/asm-sparc64/timex.h | 6 +----- include/asm-x86/timex.h | 3 +-- include/linux/timex.h | 2 ++ init/calibrate.c | 3 +-- 9 files changed, 20 insertions(+), 14 deletions(-) diff -puN arch/avr32/lib/delay.c~read_current_time-cleanups arch/avr32/lib/delay.c --- a/arch/avr32/lib/delay.c~read_current_time-cleanups +++ a/arch/avr32/lib/delay.c @@ -12,13 +12,15 @@ #include #include +#include #include #include +#include #include #include -int read_current_timer(unsigned long *timer_value) +int __devinit read_current_timer(unsigned long *timer_value) { *timer_value = sysreg_read(COUNT); return 0; diff -puN arch/sparc64/kernel/time.c~read_current_time-cleanups arch/sparc64/kernel/time.c --- a/arch/sparc64/kernel/time.c~read_current_time-cleanups +++ a/arch/sparc64/kernel/time.c @@ -1707,6 +1707,11 @@ static void __exit rtc_mini_exit(void) misc_deregister(&rtc_mini_dev); } +int __devinit read_current_timer(unsigned long *timer_val) +{ + *timer_val = tick_ops->get_tick(); + return 0; +} module_init(rtc_mini_init); module_exit(rtc_mini_exit); diff -puN arch/x86/lib/delay_32.c~read_current_time-cleanups arch/x86/lib/delay_32.c --- a/arch/x86/lib/delay_32.c~read_current_time-cleanups +++ a/arch/x86/lib/delay_32.c @@ -12,8 +12,10 @@ #include #include +#include #include #include +#include #include #include @@ -63,7 +65,7 @@ void use_tsc_delay(void) delay_fn = delay_tsc; } -int read_current_timer(unsigned long *timer_val) +int __devinit read_current_timer(unsigned long *timer_val) { if (delay_fn == delay_tsc) { rdtscl(*timer_val); diff -puN arch/x86/lib/delay_64.c~read_current_time-cleanups arch/x86/lib/delay_64.c --- a/arch/x86/lib/delay_64.c~read_current_time-cleanups +++ a/arch/x86/lib/delay_64.c @@ -10,8 +10,10 @@ #include #include +#include #include #include +#include #include #include @@ -20,7 +22,7 @@ #include #endif -int read_current_timer(unsigned long *timer_value) +int __devinit read_current_timer(unsigned long *timer_value) { rdtscll(*timer_value); return 0; diff -puN include/asm-avr32/timex.h~read_current_time-cleanups include/asm-avr32/timex.h --- a/include/asm-avr32/timex.h~read_current_time-cleanups +++ a/include/asm-avr32/timex.h @@ -34,7 +34,6 @@ static inline cycles_t get_cycles (void) return 0; } -extern int read_current_timer(unsigned long *timer_value); -#define ARCH_HAS_READ_CURRENT_TIMER 1 +#define ARCH_HAS_READ_CURRENT_TIMER #endif /* __ASM_AVR32_TIMEX_H */ diff -puN include/asm-sparc64/timex.h~read_current_time-cleanups include/asm-sparc64/timex.h --- a/include/asm-sparc64/timex.h~read_current_time-cleanups +++ a/include/asm-sparc64/timex.h @@ -14,10 +14,6 @@ typedef unsigned long cycles_t; #define get_cycles() tick_ops->get_tick() -#define ARCH_HAS_READ_CURRENT_TIMER 1 -#define read_current_timer(timer_val_p) \ -({ *timer_val_p = tick_ops->get_tick(); \ - 0; \ -}) +#define ARCH_HAS_READ_CURRENT_TIMER #endif diff -puN include/asm-x86/timex.h~read_current_time-cleanups include/asm-x86/timex.h --- a/include/asm-x86/timex.h~read_current_time-cleanups +++ a/include/asm-x86/timex.h @@ -14,7 +14,6 @@ #endif #define CLOCK_TICK_RATE PIT_TICK_RATE -extern int read_current_timer(unsigned long *timer_value); -#define ARCH_HAS_READ_CURRENT_TIMER 1 +#define ARCH_HAS_READ_CURRENT_TIMER #endif diff -puN include/linux/timex.h~read_current_time-cleanups include/linux/timex.h --- a/include/linux/timex.h~read_current_time-cleanups +++ a/include/linux/timex.h @@ -250,6 +250,8 @@ extern int do_adjtimex(struct timex *); /* Don't use! Compatibility define for existing users. */ #define tickadj (500/HZ ? : 1) +int __devinit read_current_timer(unsigned long *timer_val); + #endif /* KERNEL */ #endif /* LINUX_TIMEX_H */ diff -puN init/calibrate.c~read_current_time-cleanups init/calibrate.c --- a/init/calibrate.c~read_current_time-cleanups +++ a/init/calibrate.c @@ -7,8 +7,7 @@ #include #include #include - -#include +#include unsigned long preset_lpj; static int __init lpj_setup(char *str) _