diff options
author | Thomas Gleixner <tglx@linutronix.de> | 2009-08-20 11:06:25 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2009-08-31 03:35:47 -0400 |
commit | 2d826404f0bdcac2a4dd7e3c446b70d6a3b63b78 (patch) | |
tree | 7db2dc0fbde3a25a89f1fc1514152567f612ccde /arch/x86/include | |
parent | 47926214d8b2bef13b2be57c500194a804f16198 (diff) |
x86: Move tsc_calibration to x86_init_ops
TSC calibration is modified by the vmware hypervisor and paravirt by
separate means. Moorestown wants to add its own calibration routine as
well. So make calibrate_tsc a proper x86_init_ops function and
override it by paravirt or by the early setup of the vmware
hypervisor.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/include')
-rw-r--r-- | arch/x86/include/asm/hypervisor.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/paravirt.h | 1 | ||||
-rw-r--r-- | arch/x86/include/asm/timer.h | 5 | ||||
-rw-r--r-- | arch/x86/include/asm/tsc.h | 3 | ||||
-rw-r--r-- | arch/x86/include/asm/vmware.h | 2 | ||||
-rw-r--r-- | arch/x86/include/asm/x86_init.h | 9 |
6 files changed, 13 insertions, 9 deletions
diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h index 369f5c5d09a1..b78c0941e422 100644 --- a/arch/x86/include/asm/hypervisor.h +++ b/arch/x86/include/asm/hypervisor.h | |||
@@ -20,7 +20,7 @@ | |||
20 | #ifndef ASM_X86__HYPERVISOR_H | 20 | #ifndef ASM_X86__HYPERVISOR_H |
21 | #define ASM_X86__HYPERVISOR_H | 21 | #define ASM_X86__HYPERVISOR_H |
22 | 22 | ||
23 | extern unsigned long get_hypervisor_tsc_freq(void); | ||
24 | extern void init_hypervisor(struct cpuinfo_x86 *c); | 23 | extern void init_hypervisor(struct cpuinfo_x86 *c); |
24 | extern void init_hypervisor_platform(void); | ||
25 | 25 | ||
26 | #endif | 26 | #endif |
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h index 11a4ba7b209c..1e458a553303 100644 --- a/arch/x86/include/asm/paravirt.h +++ b/arch/x86/include/asm/paravirt.h | |||
@@ -210,7 +210,6 @@ static inline unsigned long long paravirt_sched_clock(void) | |||
210 | { | 210 | { |
211 | return PVOP_CALL0(unsigned long long, pv_time_ops.sched_clock); | 211 | return PVOP_CALL0(unsigned long long, pv_time_ops.sched_clock); |
212 | } | 212 | } |
213 | #define calibrate_tsc() (pv_time_ops.get_tsc_khz()) | ||
214 | 213 | ||
215 | static inline unsigned long long paravirt_read_pmc(int counter) | 214 | static inline unsigned long long paravirt_read_pmc(int counter) |
216 | { | 215 | { |
diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h index 65228ccc5f0d..5469630b27f5 100644 --- a/arch/x86/include/asm/timer.h +++ b/arch/x86/include/asm/timer.h | |||
@@ -8,7 +8,6 @@ | |||
8 | #define TICK_SIZE (tick_nsec / 1000) | 8 | #define TICK_SIZE (tick_nsec / 1000) |
9 | 9 | ||
10 | unsigned long long native_sched_clock(void); | 10 | unsigned long long native_sched_clock(void); |
11 | unsigned long native_calibrate_tsc(void); | ||
12 | extern int recalibrate_cpu_khz(void); | 11 | extern int recalibrate_cpu_khz(void); |
13 | 12 | ||
14 | #if defined(CONFIG_X86_32) && defined(CONFIG_X86_IO_APIC) | 13 | #if defined(CONFIG_X86_32) && defined(CONFIG_X86_IO_APIC) |
@@ -19,10 +18,6 @@ extern int timer_ack; | |||
19 | 18 | ||
20 | extern int no_timer_check; | 19 | extern int no_timer_check; |
21 | 20 | ||
22 | #ifndef CONFIG_PARAVIRT | ||
23 | #define calibrate_tsc() native_calibrate_tsc() | ||
24 | #endif | ||
25 | |||
26 | /* Accelerators for sched_clock() | 21 | /* Accelerators for sched_clock() |
27 | * convert from cycles(64bits) => nanoseconds (64bits) | 22 | * convert from cycles(64bits) => nanoseconds (64bits) |
28 | * basic equation: | 23 | * basic equation: |
diff --git a/arch/x86/include/asm/tsc.h b/arch/x86/include/asm/tsc.h index 38ae163cc91b..c0427295e8f5 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h | |||
@@ -48,7 +48,8 @@ static __always_inline cycles_t vget_cycles(void) | |||
48 | extern void tsc_init(void); | 48 | extern void tsc_init(void); |
49 | extern void mark_tsc_unstable(char *reason); | 49 | extern void mark_tsc_unstable(char *reason); |
50 | extern int unsynchronized_tsc(void); | 50 | extern int unsynchronized_tsc(void); |
51 | int check_tsc_unstable(void); | 51 | extern int check_tsc_unstable(void); |
52 | extern unsigned long native_calibrate_tsc(void); | ||
52 | 53 | ||
53 | /* | 54 | /* |
54 | * Boot-time check whether the TSCs are synchronized across | 55 | * Boot-time check whether the TSCs are synchronized across |
diff --git a/arch/x86/include/asm/vmware.h b/arch/x86/include/asm/vmware.h index c11b7e100d83..e49ed6d2fd4e 100644 --- a/arch/x86/include/asm/vmware.h +++ b/arch/x86/include/asm/vmware.h | |||
@@ -20,7 +20,7 @@ | |||
20 | #ifndef ASM_X86__VMWARE_H | 20 | #ifndef ASM_X86__VMWARE_H |
21 | #define ASM_X86__VMWARE_H | 21 | #define ASM_X86__VMWARE_H |
22 | 22 | ||
23 | extern unsigned long vmware_get_tsc_khz(void); | 23 | extern void vmware_platform_setup(void); |
24 | extern int vmware_platform(void); | 24 | extern int vmware_platform(void); |
25 | extern void vmware_set_feature_bits(struct cpuinfo_x86 *c); | 25 | extern void vmware_set_feature_bits(struct cpuinfo_x86 *c); |
26 | 26 | ||
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h index f8bdd2271a04..20df51871713 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h | |||
@@ -112,8 +112,17 @@ struct x86_cpuinit_ops { | |||
112 | void (*setup_percpu_clockev)(void); | 112 | void (*setup_percpu_clockev)(void); |
113 | }; | 113 | }; |
114 | 114 | ||
115 | /** | ||
116 | * struct x86_platform_ops - platform specific runtime functions | ||
117 | * @calibrate_tsc: calibrate TSC | ||
118 | */ | ||
119 | struct x86_platform_ops { | ||
120 | unsigned long (*calibrate_tsc)(void); | ||
121 | }; | ||
122 | |||
115 | extern struct x86_init_ops x86_init; | 123 | extern struct x86_init_ops x86_init; |
116 | extern struct x86_cpuinit_ops x86_cpuinit; | 124 | extern struct x86_cpuinit_ops x86_cpuinit; |
125 | extern struct x86_platform_ops x86_platform; | ||
117 | 126 | ||
118 | extern void x86_init_noop(void); | 127 | extern void x86_init_noop(void); |
119 | extern void x86_init_uint_noop(unsigned int unused); | 128 | extern void x86_init_uint_noop(unsigned int unused); |