diff options
author | Glauber de Oliveira Costa <gcosta@redhat.com> | 2008-01-30 07:31:10 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-01-30 07:31:10 -0500 |
commit | ee238e5ca66858f80170f87724f84d67183b069a (patch) | |
tree | c08fe7edeac9b55fad0be5f7050cc3ddf8796232 /arch/x86/kernel/time_64.c | |
parent | 49a697871e2edcbc9cc682466bc4f2316b854d23 (diff) |
x86: prepare time related functions for paravirt
This patch add provisions for time related functions so they
can be later replaced by paravirt versions.
it basically encloses {g,s}et_wallclock inside the
already existent functions update_persistent_clock and
read_persistent_clock, and defines {s,g}et_wallclock
to the core of such functions.
it also allow for a later-on-game time initialization, as done
by i386. Paravirt guests can set a function to do their own
initialization this way.
Signed-off-by: Glauber de Oliveira Costa <gcosta@redhat.com>
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
Acked-by: Jeremy Fitzhardinge <jeremy@xensource.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/kernel/time_64.c')
-rw-r--r-- | arch/x86/kernel/time_64.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/arch/x86/kernel/time_64.c b/arch/x86/kernel/time_64.c index bf0bcc9bb001..91d4d495904e 100644 --- a/arch/x86/kernel/time_64.c +++ b/arch/x86/kernel/time_64.c | |||
@@ -21,6 +21,8 @@ | |||
21 | #include <asm/hpet.h> | 21 | #include <asm/hpet.h> |
22 | #include <asm/nmi.h> | 22 | #include <asm/nmi.h> |
23 | #include <asm/vgtod.h> | 23 | #include <asm/vgtod.h> |
24 | #include <asm/time.h> | ||
25 | #include <asm/timer.h> | ||
24 | 26 | ||
25 | volatile unsigned long __jiffies __section_jiffies = INITIAL_JIFFIES; | 27 | volatile unsigned long __jiffies __section_jiffies = INITIAL_JIFFIES; |
26 | 28 | ||
@@ -54,7 +56,7 @@ static irqreturn_t timer_event_interrupt(int irq, void *dev_id) | |||
54 | /* calibrate_cpu is used on systems with fixed rate TSCs to determine | 56 | /* calibrate_cpu is used on systems with fixed rate TSCs to determine |
55 | * processor frequency */ | 57 | * processor frequency */ |
56 | #define TICK_COUNT 100000000 | 58 | #define TICK_COUNT 100000000 |
57 | static unsigned int __init tsc_calibrate_cpu_khz(void) | 59 | unsigned long __init native_calculate_cpu_khz(void) |
58 | { | 60 | { |
59 | int tsc_start, tsc_now; | 61 | int tsc_start, tsc_now; |
60 | int i, no_ctr_free; | 62 | int i, no_ctr_free; |
@@ -104,20 +106,23 @@ static struct irqaction irq0 = { | |||
104 | .name = "timer" | 106 | .name = "timer" |
105 | }; | 107 | }; |
106 | 108 | ||
107 | void __init time_init(void) | 109 | void __init hpet_time_init(void) |
108 | { | 110 | { |
109 | if (!hpet_enable()) | 111 | if (!hpet_enable()) |
110 | setup_pit_timer(); | 112 | setup_pit_timer(); |
111 | 113 | ||
112 | setup_irq(0, &irq0); | 114 | setup_irq(0, &irq0); |
115 | } | ||
113 | 116 | ||
117 | void __init time_init(void) | ||
118 | { | ||
114 | tsc_calibrate(); | 119 | tsc_calibrate(); |
115 | 120 | ||
116 | cpu_khz = tsc_khz; | 121 | cpu_khz = tsc_khz; |
117 | if (cpu_has(&boot_cpu_data, X86_FEATURE_CONSTANT_TSC) && | 122 | if (cpu_has(&boot_cpu_data, X86_FEATURE_CONSTANT_TSC) && |
118 | boot_cpu_data.x86_vendor == X86_VENDOR_AMD && | 123 | boot_cpu_data.x86_vendor == X86_VENDOR_AMD && |
119 | boot_cpu_data.x86 == 16) | 124 | boot_cpu_data.x86 == 16) |
120 | cpu_khz = tsc_calibrate_cpu_khz(); | 125 | cpu_khz = calculate_cpu_khz(); |
121 | 126 | ||
122 | if (unsynchronized_tsc()) | 127 | if (unsynchronized_tsc()) |
123 | mark_tsc_unstable("TSCs unsynchronized"); | 128 | mark_tsc_unstable("TSCs unsynchronized"); |
@@ -130,4 +135,5 @@ void __init time_init(void) | |||
130 | printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n", | 135 | printk(KERN_INFO "time.c: Detected %d.%03d MHz processor.\n", |
131 | cpu_khz / 1000, cpu_khz % 1000); | 136 | cpu_khz / 1000, cpu_khz % 1000); |
132 | init_tsc_clocksource(); | 137 | init_tsc_clocksource(); |
138 | late_time_init = choose_time_init(); | ||
133 | } | 139 | } |