diff -BruN 0/arch/x86_64/kernel/i8259.c 1/arch/x86_64/kernel/i8259.c --- 0/arch/x86_64/kernel/i8259.c 2005-03-07 23:29:42.000000000 +0800 +++ 1/arch/x86_64/kernel/i8259.c 2005-03-09 12:53:10.000000000 +0800 @@ -477,6 +477,7 @@ void call_function_interrupt(void); void invalidate_interrupt(void); void thermal_interrupt(void); +void i8254_timer_resume(void); static void setup_timer(void) { @@ -493,6 +494,11 @@ return 0; } +void i8254_timer_resume(void) +{ + setup_timer(); +} + static struct sysdev_class timer_sysclass = { set_kset_name("timer"), .resume = timer_resume, diff -BruN 0/arch/x86_64/kernel/time.c 1/arch/x86_64/kernel/time.c --- 0/arch/x86_64/kernel/time.c 2005-03-07 23:32:23.000000000 +0800 +++ 1/arch/x86_64/kernel/time.c 2005-03-09 12:53:10.000000000 +0800 @@ -46,7 +46,7 @@ #ifdef CONFIG_CPU_FREQ static void cpufreq_delayed_get(void); #endif - +extern void i8254_timer_resume(void); extern int using_apic_timer; DEFINE_SPINLOCK(rtc_lock); @@ -980,6 +980,8 @@ if (vxtime.hpet_address) hpet_reenable(); + else + i8254_timer_resume(); sec = ctime + clock_cmos_diff; write_seqlock_irqsave(&xtime_lock,flags);