aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/include/asm/paravirt.h5
-rw-r--r--arch/x86/include/asm/paravirt_types.h2
-rw-r--r--arch/x86/include/asm/setup.h21
-rw-r--r--arch/x86/include/asm/time.h1
-rw-r--r--arch/x86/include/asm/timer.h3
-rw-r--r--arch/x86/include/asm/x86_init.h4
-rw-r--r--arch/x86/kernel/apic/numaq_32.c10
-rw-r--r--arch/x86/kernel/paravirt.c1
-rw-r--r--arch/x86/kernel/setup.c43
-rw-r--r--arch/x86/kernel/time_32.c34
-rw-r--r--arch/x86/kernel/time_64.c9
-rw-r--r--arch/x86/kernel/tsc.c2
-rw-r--r--arch/x86/kernel/visws_quirks.c20
-rw-r--r--arch/x86/kernel/vmi_32.c2
-rw-r--r--arch/x86/kernel/x86_init.c3
-rw-r--r--arch/x86/lguest/boot.c2
-rw-r--r--arch/x86/xen/enlighten.c4
17 files changed, 53 insertions, 113 deletions
diff --git a/arch/x86/include/asm/paravirt.h b/arch/x86/include/asm/paravirt.h
index 825674a968d..11a4ba7b209 100644
--- a/arch/x86/include/asm/paravirt.h
+++ b/arch/x86/include/asm/paravirt.h
@@ -34,11 +34,6 @@ static inline int set_wallclock(unsigned long nowtime)
34 return PVOP_CALL1(int, pv_time_ops.set_wallclock, nowtime); 34 return PVOP_CALL1(int, pv_time_ops.set_wallclock, nowtime);
35} 35}
36 36
37static inline void (*choose_time_init(void))(void)
38{
39 return pv_time_ops.time_init;
40}
41
42/* The paravirtualized CPUID instruction. */ 37/* The paravirtualized CPUID instruction. */
43static inline void __cpuid(unsigned int *eax, unsigned int *ebx, 38static inline void __cpuid(unsigned int *eax, unsigned int *ebx,
44 unsigned int *ecx, unsigned int *edx) 39 unsigned int *ecx, unsigned int *edx)
diff --git a/arch/x86/include/asm/paravirt_types.h b/arch/x86/include/asm/paravirt_types.h
index 1da89276d14..0d812e592e3 100644
--- a/arch/x86/include/asm/paravirt_types.h
+++ b/arch/x86/include/asm/paravirt_types.h
@@ -88,8 +88,6 @@ struct pv_lazy_ops {
88}; 88};
89 89
90struct pv_time_ops { 90struct pv_time_ops {
91 void (*time_init)(void);
92
93 /* Set and set time of day */ 91 /* Set and set time of day */
94 unsigned long (*get_wallclock)(void); 92 unsigned long (*get_wallclock)(void);
95 int (*set_wallclock)(unsigned long); 93 int (*set_wallclock)(unsigned long);
diff --git a/arch/x86/include/asm/setup.h b/arch/x86/include/asm/setup.h
index 58b58952b80..861e1fe2303 100644
--- a/arch/x86/include/asm/setup.h
+++ b/arch/x86/include/asm/setup.h
@@ -5,24 +5,6 @@
5 5
6#define COMMAND_LINE_SIZE 2048 6#define COMMAND_LINE_SIZE 2048
7 7
8#ifndef __ASSEMBLY__
9
10#include <asm/x86_init.h>
11
12/*
13 * Any setup quirks to be performed?
14 */
15
16struct x86_quirks {
17 int (*arch_pre_time_init)(void);
18 int (*arch_time_init)(void);
19};
20
21extern void x86_quirk_pre_time_init(void);
22extern void x86_quirk_time_init(void);
23
24#endif /* __ASSEMBLY__ */
25
26#ifdef __i386__ 8#ifdef __i386__
27 9
28#include <linux/pfn.h> 10#include <linux/pfn.h>
@@ -42,6 +24,7 @@ extern void x86_quirk_time_init(void);
42 24
43#ifndef __ASSEMBLY__ 25#ifndef __ASSEMBLY__
44#include <asm/bootparam.h> 26#include <asm/bootparam.h>
27#include <asm/x86_init.h>
45 28
46/* Interrupt control for vSMPowered x86_64 systems */ 29/* Interrupt control for vSMPowered x86_64 systems */
47#ifdef CONFIG_X86_64 30#ifdef CONFIG_X86_64
@@ -60,11 +43,11 @@ static inline void visws_early_detect(void) { }
60static inline int is_visws_box(void) { return 0; } 43static inline int is_visws_box(void) { return 0; }
61#endif 44#endif
62 45
63extern struct x86_quirks *x86_quirks;
64extern unsigned long saved_video_mode; 46extern unsigned long saved_video_mode;
65 47
66extern void reserve_standard_io_resources(void); 48extern void reserve_standard_io_resources(void);
67extern void i386_reserve_resources(void); 49extern void i386_reserve_resources(void);
50extern void setup_default_timer_irq(void);
68 51
69#ifndef _SETUP 52#ifndef _SETUP
70 53
diff --git a/arch/x86/include/asm/time.h b/arch/x86/include/asm/time.h
index 50c733aac42..91bb162b5a3 100644
--- a/arch/x86/include/asm/time.h
+++ b/arch/x86/include/asm/time.h
@@ -54,7 +54,6 @@ extern void time_init(void);
54 54
55#define get_wallclock() native_get_wallclock() 55#define get_wallclock() native_get_wallclock()
56#define set_wallclock(x) native_set_wallclock(x) 56#define set_wallclock(x) native_set_wallclock(x)
57#define choose_time_init() hpet_time_init
58 57
59#endif /* CONFIG_PARAVIRT */ 58#endif /* CONFIG_PARAVIRT */
60 59
diff --git a/arch/x86/include/asm/timer.h b/arch/x86/include/asm/timer.h
index 20ca9c4d468..e854c7ab416 100644
--- a/arch/x86/include/asm/timer.h
+++ b/arch/x86/include/asm/timer.h
@@ -12,8 +12,7 @@ unsigned long native_calibrate_tsc(void);
12 12
13#ifdef CONFIG_X86_32 13#ifdef CONFIG_X86_32
14extern int timer_ack; 14extern int timer_ack;
15extern irqreturn_t timer_interrupt(int irq, void *dev_id); 15#endif
16#endif /* CONFIG_X86_32 */
17extern int recalibrate_cpu_khz(void); 16extern int recalibrate_cpu_khz(void);
18 17
19extern int no_timer_check; 18extern int no_timer_check;
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h
index b7d258f4c40..f8bdd2271a0 100644
--- a/arch/x86/include/asm/x86_init.h
+++ b/arch/x86/include/asm/x86_init.h
@@ -82,9 +82,13 @@ struct x86_init_paging {
82 * struct x86_init_timers - platform specific timer setup 82 * struct x86_init_timers - platform specific timer setup
83 * @setup_perpcu_clockev: set up the per cpu clock event device for the 83 * @setup_perpcu_clockev: set up the per cpu clock event device for the
84 * boot cpu 84 * boot cpu
85 * @tsc_pre_init: platform function called before TSC init
86 * @timer_init: initialize the platform timer (default PIT/HPET)
85 */ 87 */
86struct x86_init_timers { 88struct x86_init_timers {
87 void (*setup_percpu_clockev)(void); 89 void (*setup_percpu_clockev)(void);
90 void (*tsc_pre_init)(void);
91 void (*timer_init)(void);
88}; 92};
89 93
90/** 94/**
diff --git a/arch/x86/kernel/apic/numaq_32.c b/arch/x86/kernel/apic/numaq_32.c
index 71c5ea64586..f1ebed6bd15 100644
--- a/arch/x86/kernel/apic/numaq_32.c
+++ b/arch/x86/kernel/apic/numaq_32.c
@@ -129,10 +129,9 @@ void __cpuinit numaq_tsc_disable(void)
129 } 129 }
130} 130}
131 131
132static int __init numaq_pre_time_init(void) 132static void __init numaq_tsc_init(void)
133{ 133{
134 numaq_tsc_disable(); 134 numaq_tsc_disable();
135 return 0;
136} 135}
137 136
138static inline int generate_logical_apicid(int quad, int phys_apicid) 137static inline int generate_logical_apicid(int quad, int phys_apicid)
@@ -262,11 +261,6 @@ static void __init smp_read_mpc_oem(struct mpc_table *mpc)
262 } 261 }
263} 262}
264 263
265static struct x86_quirks numaq_x86_quirks __initdata = {
266 .arch_pre_time_init = numaq_pre_time_init,
267 .arch_time_init = NULL,
268};
269
270static __init void early_check_numaq(void) 264static __init void early_check_numaq(void)
271{ 265{
272 /* 266 /*
@@ -281,13 +275,13 @@ static __init void early_check_numaq(void)
281 early_get_smp_config(); 275 early_get_smp_config();
282 276
283 if (found_numaq) { 277 if (found_numaq) {
284 x86_quirks = &numaq_x86_quirks;
285 x86_init.mpparse.mpc_record = numaq_mpc_record; 278 x86_init.mpparse.mpc_record = numaq_mpc_record;
286 x86_init.mpparse.setup_ioapic_ids = x86_init_noop; 279 x86_init.mpparse.setup_ioapic_ids = x86_init_noop;
287 x86_init.mpparse.mpc_apic_id = mpc_apic_id; 280 x86_init.mpparse.mpc_apic_id = mpc_apic_id;
288 x86_init.mpparse.smp_read_mpc_oem = smp_read_mpc_oem; 281 x86_init.mpparse.smp_read_mpc_oem = smp_read_mpc_oem;
289 x86_init.mpparse.mpc_oem_pci_bus = mpc_oem_pci_bus; 282 x86_init.mpparse.mpc_oem_pci_bus = mpc_oem_pci_bus;
290 x86_init.mpparse.mpc_oem_bus_info = mpc_oem_bus_info; 283 x86_init.mpparse.mpc_oem_bus_info = mpc_oem_bus_info;
284 x86_init.timers.tsc_pre_init = numaq_tsc_init;
291 } 285 }
292} 286}
293 287
diff --git a/arch/x86/kernel/paravirt.c b/arch/x86/kernel/paravirt.c
index 1ed32c79679..9c0e644a76d 100644
--- a/arch/x86/kernel/paravirt.c
+++ b/arch/x86/kernel/paravirt.c
@@ -306,7 +306,6 @@ struct pv_init_ops pv_init_ops = {
306}; 306};
307 307
308struct pv_time_ops pv_time_ops = { 308struct pv_time_ops pv_time_ops = {
309 .time_init = hpet_time_init,
310 .get_wallclock = native_get_wallclock, 309 .get_wallclock = native_get_wallclock,
311 .set_wallclock = native_set_wallclock, 310 .set_wallclock = native_set_wallclock,
312 .sched_clock = native_sched_clock, 311 .sched_clock = native_sched_clock,
diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
index 43ec6aa175b..bb207a47c63 100644
--- a/arch/x86/kernel/setup.c
+++ b/arch/x86/kernel/setup.c
@@ -626,10 +626,6 @@ static int __init setup_elfcorehdr(char *arg)
626early_param("elfcorehdr", setup_elfcorehdr); 626early_param("elfcorehdr", setup_elfcorehdr);
627#endif 627#endif
628 628
629static struct x86_quirks default_x86_quirks __initdata;
630
631struct x86_quirks *x86_quirks __initdata = &default_x86_quirks;
632
633#ifdef CONFIG_X86_RESERVE_LOW_64K 629#ifdef CONFIG_X86_RESERVE_LOW_64K
634static int __init dmi_low_memory_corruption(const struct dmi_system_id *d) 630static int __init dmi_low_memory_corruption(const struct dmi_system_id *d)
635{ 631{
@@ -1016,45 +1012,6 @@ void __init setup_arch(char **cmdline_p)
1016 1012
1017#ifdef CONFIG_X86_32 1013#ifdef CONFIG_X86_32
1018 1014
1019static struct irqaction irq0 = {
1020 .handler = timer_interrupt,
1021 .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL | IRQF_TIMER,
1022 .name = "timer"
1023};
1024
1025/**
1026 * x86_quirk_pre_time_init - do any specific initialisations before.
1027 *
1028 **/
1029void __init x86_quirk_pre_time_init(void)
1030{
1031 if (x86_quirks->arch_pre_time_init)
1032 x86_quirks->arch_pre_time_init();
1033}
1034
1035/**
1036 * x86_quirk_time_init - do any specific initialisations for the system timer.
1037 *
1038 * Description:
1039 * Must plug the system timer interrupt source at HZ into the IRQ listed
1040 * in irq_vectors.h:TIMER_IRQ
1041 **/
1042void __init x86_quirk_time_init(void)
1043{
1044 if (x86_quirks->arch_time_init) {
1045 /*
1046 * A nonzero return code does not mean failure, it means
1047 * that the architecture quirk does not want any
1048 * generic (timer) setup to be performed after this:
1049 */
1050 if (x86_quirks->arch_time_init())
1051 return;
1052 }
1053
1054 irq0.mask = cpumask_of_cpu(0);
1055 setup_irq(0, &irq0);
1056}
1057
1058static struct resource video_ram_resource = { 1015static struct resource video_ram_resource = {
1059 .name = "Video RAM area", 1016 .name = "Video RAM area",
1060 .start = 0xa0000, 1017 .start = 0xa0000,
diff --git a/arch/x86/kernel/time_32.c b/arch/x86/kernel/time_32.c
index 5c5d87f0b2e..89bbb52218b 100644
--- a/arch/x86/kernel/time_32.c
+++ b/arch/x86/kernel/time_32.c
@@ -72,7 +72,7 @@ EXPORT_SYMBOL(profile_pc);
72 * Time Stamp Counter value at the time of the timer interrupt, so that 72 * Time Stamp Counter value at the time of the timer interrupt, so that
73 * we later on can estimate the time of day more exactly. 73 * we later on can estimate the time of day more exactly.
74 */ 74 */
75irqreturn_t timer_interrupt(int irq, void *dev_id) 75static irqreturn_t timer_interrupt(int irq, void *dev_id)
76{ 76{
77 /* Keep nmi watchdog up to date */ 77 /* Keep nmi watchdog up to date */
78 inc_irq_stat(irq0_irqs); 78 inc_irq_stat(irq0_irqs);
@@ -113,25 +113,37 @@ irqreturn_t timer_interrupt(int irq, void *dev_id)
113 return IRQ_HANDLED; 113 return IRQ_HANDLED;
114} 114}
115 115
116/* Duplicate of time_init() below, with hpet_enable part added */ 116static struct irqaction irq0 = {
117 .handler = timer_interrupt,
118 .flags = IRQF_DISABLED | IRQF_NOBALANCING | IRQF_IRQPOLL | IRQF_TIMER,
119 .name = "timer"
120};
121
122void __init setup_default_timer_irq(void)
123{
124 irq0.mask = cpumask_of_cpu(0);
125 setup_irq(0, &irq0);
126}
127
128/* Default timer init function */
117void __init hpet_time_init(void) 129void __init hpet_time_init(void)
118{ 130{
119 if (!hpet_enable()) 131 if (!hpet_enable())
120 setup_pit_timer(); 132 setup_pit_timer();
121 x86_quirk_time_init(); 133 setup_default_timer_irq();
134}
135
136static void x86_late_time_init(void)
137{
138 x86_init.timers.timer_init();
122} 139}
123 140
124/* 141/*
125 * This is called directly from init code; we must delay timer setup in the 142 * Initialize TSC and delay the periodic timer init to
126 * HPET case as we can't make the decision to turn on HPET this early in the 143 * late x86_late_time_init() so ioremap works.
127 * boot process.
128 *
129 * The chosen time_init function will usually be hpet_time_init, above, but
130 * in the case of virtual hardware, an alternative function may be substituted.
131 */ 144 */
132void __init time_init(void) 145void __init time_init(void)
133{ 146{
134 x86_quirk_pre_time_init();
135 tsc_init(); 147 tsc_init();
136 late_time_init = choose_time_init(); 148 late_time_init = x86_late_time_init;
137} 149}
diff --git a/arch/x86/kernel/time_64.c b/arch/x86/kernel/time_64.c
index 5ba343e6184..38a7df94c10 100644
--- a/arch/x86/kernel/time_64.c
+++ b/arch/x86/kernel/time_64.c
@@ -19,6 +19,7 @@
19#include <linux/mca.h> 19#include <linux/mca.h>
20#include <linux/nmi.h> 20#include <linux/nmi.h>
21 21
22#include <asm/x86_init.h>
22#include <asm/i8253.h> 23#include <asm/i8253.h>
23#include <asm/hpet.h> 24#include <asm/hpet.h>
24#include <asm/vgtod.h> 25#include <asm/vgtod.h>
@@ -127,9 +128,13 @@ void __init hpet_time_init(void)
127 setup_irq(0, &irq0); 128 setup_irq(0, &irq0);
128} 129}
129 130
131static void x86_late_time_init(void)
132{
133 x86_init.timers.timer_init();
134}
135
130void __init time_init(void) 136void __init time_init(void)
131{ 137{
132 tsc_init(); 138 tsc_init();
133 139 late_time_init = x86_late_time_init;
134 late_time_init = choose_time_init();
135} 140}
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 71f4368b357..652bc214eeb 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -857,6 +857,8 @@ void __init tsc_init(void)
857 u64 lpj; 857 u64 lpj;
858 int cpu; 858 int cpu;
859 859
860 x86_init.timers.tsc_pre_init();
861
860 if (!cpu_has_tsc) 862 if (!cpu_has_tsc)
861 return; 863 return;
862 864
diff --git a/arch/x86/kernel/visws_quirks.c b/arch/x86/kernel/visws_quirks.c
index 2719091b335..f068553a1b1 100644
--- a/arch/x86/kernel/visws_quirks.c
+++ b/arch/x86/kernel/visws_quirks.c
@@ -30,6 +30,7 @@
30#include <asm/setup.h> 30#include <asm/setup.h>
31#include <asm/apic.h> 31#include <asm/apic.h>
32#include <asm/e820.h> 32#include <asm/e820.h>
33#include <asm/time.h>
33#include <asm/io.h> 34#include <asm/io.h>
34 35
35#include <linux/kernel_stat.h> 36#include <linux/kernel_stat.h>
@@ -53,7 +54,7 @@ int is_visws_box(void)
53 return visws_board_type >= 0; 54 return visws_board_type >= 0;
54} 55}
55 56
56static int __init visws_time_init(void) 57static void __init visws_time_init(void)
57{ 58{
58 printk(KERN_INFO "Starting Cobalt Timer system clock\n"); 59 printk(KERN_INFO "Starting Cobalt Timer system clock\n");
59 60
@@ -66,11 +67,7 @@ static int __init visws_time_init(void)
66 /* Enable (unmask) the timer interrupt */ 67 /* Enable (unmask) the timer interrupt */
67 co_cpu_write(CO_CPU_CTRL, co_cpu_read(CO_CPU_CTRL) & ~CO_CTRL_TIMEMASK); 68 co_cpu_write(CO_CPU_CTRL, co_cpu_read(CO_CPU_CTRL) & ~CO_CTRL_TIMEMASK);
68 69
69 /* 70 setup_default_timer_irq();
70 * Zero return means the generic timer setup code will set up
71 * the standard vector:
72 */
73 return 0;
74} 71}
75 72
76/* Replaces the default init_ISA_irqs in the generic setup */ 73/* Replaces the default init_ISA_irqs in the generic setup */
@@ -226,10 +223,6 @@ static void __init visws_find_smp_config(unsigned int reserve)
226 223
227static void visws_trap_init(void); 224static void visws_trap_init(void);
228 225
229static struct x86_quirks visws_x86_quirks __initdata = {
230 .arch_time_init = visws_time_init,
231};
232
233void __init visws_early_detect(void) 226void __init visws_early_detect(void)
234{ 227{
235 int raw; 228 int raw;
@@ -241,17 +234,14 @@ void __init visws_early_detect(void)
241 return; 234 return;
242 235
243 /* 236 /*
244 * Install special quirks for timer, interrupt and memory setup: 237 * Override the default platform setup functions
245 * Fall back to generic behavior for traps:
246 * Override generic MP-table parsing:
247 */ 238 */
248 x86_quirks = &visws_x86_quirks;
249
250 x86_init.resources.memory_setup = visws_memory_setup; 239 x86_init.resources.memory_setup = visws_memory_setup;
251 x86_init.mpparse.get_smp_config = visws_get_smp_config; 240 x86_init.mpparse.get_smp_config = visws_get_smp_config;
252 x86_init.mpparse.find_smp_config = visws_find_smp_config; 241 x86_init.mpparse.find_smp_config = visws_find_smp_config;
253 x86_init.irqs.pre_vector_init = visws_pre_intr_init; 242 x86_init.irqs.pre_vector_init = visws_pre_intr_init;
254 x86_init.irqs.trap_init = visws_trap_init; 243 x86_init.irqs.trap_init = visws_trap_init;
244 x86_init.timers.timer_init = visws_time_init;
255 245
256 /* 246 /*
257 * Install reboot quirks: 247 * Install reboot quirks:
diff --git a/arch/x86/kernel/vmi_32.c b/arch/x86/kernel/vmi_32.c
index b43b6685cae..cd7d0fbbf66 100644
--- a/arch/x86/kernel/vmi_32.c
+++ b/arch/x86/kernel/vmi_32.c
@@ -817,7 +817,7 @@ static inline int __init activate_vmi(void)
817 vmi_timer_ops.set_alarm = vmi_get_function(VMI_CALL_SetAlarm); 817 vmi_timer_ops.set_alarm = vmi_get_function(VMI_CALL_SetAlarm);
818 vmi_timer_ops.cancel_alarm = 818 vmi_timer_ops.cancel_alarm =
819 vmi_get_function(VMI_CALL_CancelAlarm); 819 vmi_get_function(VMI_CALL_CancelAlarm);
820 pv_time_ops.time_init = vmi_time_init; 820 x86_init.timers.timer_init = vmi_time_init;
821 pv_time_ops.get_wallclock = vmi_get_wallclock; 821 pv_time_ops.get_wallclock = vmi_get_wallclock;
822 pv_time_ops.set_wallclock = vmi_set_wallclock; 822 pv_time_ops.set_wallclock = vmi_set_wallclock;
823#ifdef CONFIG_X86_LOCAL_APIC 823#ifdef CONFIG_X86_LOCAL_APIC
diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c
index e666a98db7c..4790b92714a 100644
--- a/arch/x86/kernel/x86_init.c
+++ b/arch/x86/kernel/x86_init.c
@@ -11,6 +11,7 @@
11#include <asm/setup.h> 11#include <asm/setup.h>
12#include <asm/apic.h> 12#include <asm/apic.h>
13#include <asm/e820.h> 13#include <asm/e820.h>
14#include <asm/time.h>
14#include <asm/irq.h> 15#include <asm/irq.h>
15 16
16void __cpuinit x86_init_noop(void) { } 17void __cpuinit x86_init_noop(void) { }
@@ -58,6 +59,8 @@ struct __initdata x86_init_ops x86_init = {
58 59
59 .timers = { 60 .timers = {
60 .setup_percpu_clockev = setup_boot_APIC_clock, 61 .setup_percpu_clockev = setup_boot_APIC_clock,
62 .tsc_pre_init = x86_init_noop,
63 .timer_init = hpet_time_init,
61 }, 64 },
62}; 65};
63 66
diff --git a/arch/x86/lguest/boot.c b/arch/x86/lguest/boot.c
index 1ff986511f1..6caa8c0c793 100644
--- a/arch/x86/lguest/boot.c
+++ b/arch/x86/lguest/boot.c
@@ -1320,11 +1320,11 @@ __init void lguest_init(void)
1320 1320
1321 /* Time operations */ 1321 /* Time operations */
1322 pv_time_ops.get_wallclock = lguest_get_wallclock; 1322 pv_time_ops.get_wallclock = lguest_get_wallclock;
1323 pv_time_ops.time_init = lguest_time_init;
1324 pv_time_ops.get_tsc_khz = lguest_tsc_khz; 1323 pv_time_ops.get_tsc_khz = lguest_tsc_khz;
1325 1324
1326 x86_init.resources.memory_setup = lguest_memory_setup; 1325 x86_init.resources.memory_setup = lguest_memory_setup;
1327 x86_init.irqs.intr_init = lguest_init_IRQ; 1326 x86_init.irqs.intr_init = lguest_init_IRQ;
1327 x86_init.timers.timer_init = lguest_time_init;
1328 1328
1329 /* 1329 /*
1330 * Now is a good time to look at the implementations of these functions 1330 * Now is a good time to look at the implementations of these functions
diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c
index 14e597e0c16..84826b842b5 100644
--- a/arch/x86/xen/enlighten.c
+++ b/arch/x86/xen/enlighten.c
@@ -842,8 +842,6 @@ static const struct pv_init_ops xen_init_ops __initdata = {
842}; 842};
843 843
844static const struct pv_time_ops xen_time_ops __initdata = { 844static const struct pv_time_ops xen_time_ops __initdata = {
845 .time_init = xen_time_init,
846
847 .set_wallclock = xen_set_wallclock, 845 .set_wallclock = xen_set_wallclock,
848 .get_wallclock = xen_get_wallclock, 846 .get_wallclock = xen_get_wallclock,
849 .get_tsc_khz = xen_tsc_khz, 847 .get_tsc_khz = xen_tsc_khz,
@@ -977,6 +975,8 @@ asmlinkage void __init xen_start_kernel(void)
977 x86_init.resources.memory_setup = xen_memory_setup; 975 x86_init.resources.memory_setup = xen_memory_setup;
978 x86_init.oem.arch_setup = xen_arch_setup; 976 x86_init.oem.arch_setup = xen_arch_setup;
979 x86_init.oem.banner = xen_banner; 977 x86_init.oem.banner = xen_banner;
978
979 x86_init.timers.timer_init = xen_time_init;
980 x86_init.timers.setup_percpu_clockev = x86_init_noop; 980 x86_init.timers.setup_percpu_clockev = x86_init_noop;
981 x86_cpuinit.setup_percpu_clockev = x86_init_noop; 981 x86_cpuinit.setup_percpu_clockev = x86_init_noop;
982 982