diff options
-rw-r--r-- | arch/i386/kernel/paravirt.c | 2 | ||||
-rw-r--r-- | arch/i386/kernel/time.c | 14 | ||||
-rw-r--r-- | include/asm-i386/paravirt.h | 4 | ||||
-rw-r--r-- | include/asm-i386/time.h | 5 |
4 files changed, 18 insertions, 7 deletions
diff --git a/arch/i386/kernel/paravirt.c b/arch/i386/kernel/paravirt.c index 871448db1425..2ec331e03fa9 100644 --- a/arch/i386/kernel/paravirt.c +++ b/arch/i386/kernel/paravirt.c | |||
@@ -494,7 +494,7 @@ struct paravirt_ops paravirt_ops = { | |||
494 | .memory_setup = machine_specific_memory_setup, | 494 | .memory_setup = machine_specific_memory_setup, |
495 | .get_wallclock = native_get_wallclock, | 495 | .get_wallclock = native_get_wallclock, |
496 | .set_wallclock = native_set_wallclock, | 496 | .set_wallclock = native_set_wallclock, |
497 | .time_init = time_init_hook, | 497 | .time_init = hpet_time_init, |
498 | .init_IRQ = native_init_IRQ, | 498 | .init_IRQ = native_init_IRQ, |
499 | 499 | ||
500 | .cpuid = native_cpuid, | 500 | .cpuid = native_cpuid, |
diff --git a/arch/i386/kernel/time.c b/arch/i386/kernel/time.c index a5350059557a..ccd3734edb8f 100644 --- a/arch/i386/kernel/time.c +++ b/arch/i386/kernel/time.c | |||
@@ -262,14 +262,22 @@ void notify_arch_cmos_timer(void) | |||
262 | 262 | ||
263 | extern void (*late_time_init)(void); | 263 | extern void (*late_time_init)(void); |
264 | /* Duplicate of time_init() below, with hpet_enable part added */ | 264 | /* Duplicate of time_init() below, with hpet_enable part added */ |
265 | static void __init hpet_time_init(void) | 265 | void __init hpet_time_init(void) |
266 | { | 266 | { |
267 | if (!hpet_enable()) | 267 | if (!hpet_enable()) |
268 | setup_pit_timer(); | 268 | setup_pit_timer(); |
269 | do_time_init(); | 269 | time_init_hook(); |
270 | } | 270 | } |
271 | 271 | ||
272 | /* | ||
273 | * This is called directly from init code; we must delay timer setup in the | ||
274 | * HPET case as we can't make the decision to turn on HPET this early in the | ||
275 | * boot process. | ||
276 | * | ||
277 | * The chosen time_init function will usually be hpet_time_init, above, but | ||
278 | * in the case of virtual hardware, an alternative function may be substituted. | ||
279 | */ | ||
272 | void __init time_init(void) | 280 | void __init time_init(void) |
273 | { | 281 | { |
274 | late_time_init = hpet_time_init; | 282 | late_time_init = choose_time_init(); |
275 | } | 283 | } |
diff --git a/include/asm-i386/paravirt.h b/include/asm-i386/paravirt.h index 1e4226a85263..f8319cae2ac5 100644 --- a/include/asm-i386/paravirt.h +++ b/include/asm-i386/paravirt.h | |||
@@ -186,9 +186,9 @@ static inline int set_wallclock(unsigned long nowtime) | |||
186 | return paravirt_ops.set_wallclock(nowtime); | 186 | return paravirt_ops.set_wallclock(nowtime); |
187 | } | 187 | } |
188 | 188 | ||
189 | static inline void do_time_init(void) | 189 | static inline void (*choose_time_init(void))(void) |
190 | { | 190 | { |
191 | return paravirt_ops.time_init(); | 191 | return paravirt_ops.time_init; |
192 | } | 192 | } |
193 | 193 | ||
194 | /* The paravirtualized CPUID instruction. */ | 194 | /* The paravirtualized CPUID instruction. */ |
diff --git a/include/asm-i386/time.h b/include/asm-i386/time.h index ea8065af825a..eac011366dc2 100644 --- a/include/asm-i386/time.h +++ b/include/asm-i386/time.h | |||
@@ -28,13 +28,16 @@ static inline int native_set_wallclock(unsigned long nowtime) | |||
28 | return retval; | 28 | return retval; |
29 | } | 29 | } |
30 | 30 | ||
31 | extern void (*late_time_init)(void); | ||
32 | extern void hpet_time_init(void); | ||
33 | |||
31 | #ifdef CONFIG_PARAVIRT | 34 | #ifdef CONFIG_PARAVIRT |
32 | #include <asm/paravirt.h> | 35 | #include <asm/paravirt.h> |
33 | #else /* !CONFIG_PARAVIRT */ | 36 | #else /* !CONFIG_PARAVIRT */ |
34 | 37 | ||
35 | #define get_wallclock() native_get_wallclock() | 38 | #define get_wallclock() native_get_wallclock() |
36 | #define set_wallclock(x) native_set_wallclock(x) | 39 | #define set_wallclock(x) native_set_wallclock(x) |
37 | #define do_time_init() time_init_hook() | 40 | #define choose_time_init() hpet_time_init |
38 | 41 | ||
39 | #endif /* CONFIG_PARAVIRT */ | 42 | #endif /* CONFIG_PARAVIRT */ |
40 | 43 | ||