Ack. Thanks, Venki
>-----Original Message----- >From: [EMAIL PROTECTED] >[mailto:[EMAIL PROTECTED] On Behalf Of OGAWA Hirofumi >Sent: Monday, November 26, 2007 1:43 PM >To: Ingo Molnar >Cc: Linus Torvalds; linux-kernel@vger.kernel.org; Thomas >Gleixner; H. Peter Anvin >Subject: [PATCH] x86: disable hpet legacy replacement for kexec > >Hi, > >This seems to introduced after 2.6.23, so if possible, I'd like to fix >before 2.6.24. What do you think the following? > >Thanks. >-- >OGAWA Hirofumi <[EMAIL PROTECTED]> > > >If HPET was enabled by pci quirks, we use i8253 as initial clockevent >because pci quirks doesn't run until pci is initialized. > >The above means the kernel (or something) is assuming HPET legacy >replacement is disabled and can use i8253 at boot. > >If we used kexec, it isn't true. So, this patch disables HPET legacy >replacement for kexec in machine_shutdown(). > >Signed-off-by: OGAWA Hirofumi <[EMAIL PROTECTED]> >--- > > arch/x86/kernel/hpet.c | 14 ++++++++++++++ > arch/x86/kernel/reboot_32.c | 4 ++++ > arch/x86/kernel/reboot_64.c | 4 ++++ > include/asm-x86/hpet.h | 1 + > 4 files changed, 23 insertions(+) > >diff -puN arch/x86/kernel/hpet.c~kexec-need-to-disable-hpet >arch/x86/kernel/hpet.c >--- >linux-2.6/arch/x86/kernel/hpet.c~kexec-need-to-disable-hpet >2007-11-24 09:38:23.000000000 +0900 >+++ linux-2.6-hirofumi/arch/x86/kernel/hpet.c 2007-11-27 >04:57:00.000000000 +0900 >@@ -446,6 +446,20 @@ static __init int hpet_late_init(void) > } > fs_initcall(hpet_late_init); > >+void hpet_disable(void) >+{ >+ if (is_hpet_capable()) { >+ unsigned long cfg = hpet_readl(HPET_CFG); >+ >+ if (hpet_legacy_int_enabled) { >+ cfg &= ~HPET_CFG_LEGACY; >+ hpet_legacy_int_enabled = 0; >+ } >+ cfg &= ~HPET_CFG_ENABLE; >+ hpet_writel(cfg, HPET_CFG); >+ } >+} >+ > #ifdef CONFIG_HPET_EMULATE_RTC > > /* HPET in LegacyReplacement Mode eats up RTC interrupt line. >When, HPET >diff -puN >arch/x86/kernel/reboot_32.c~kexec-need-to-disable-hpet >arch/x86/kernel/reboot_32.c >--- >linux-2.6/arch/x86/kernel/reboot_32.c~kexec-need-to-disab >le-hpet 2007-11-24 09:38:23.000000000 +0900 >+++ linux-2.6-hirofumi/arch/x86/kernel/reboot_32.c >2007-11-27 04:57:50.000000000 +0900 >@@ -11,6 +11,7 @@ > #include <linux/reboot.h> > #include <asm/uaccess.h> > #include <asm/apic.h> >+#include <asm/hpet.h> > #include <asm/desc.h> > #include "mach_reboot.h" > #include <asm/reboot_fixups.h> >@@ -326,6 +327,9 @@ static void native_machine_shutdown(void > #ifdef CONFIG_X86_IO_APIC > disable_IO_APIC(); > #endif >+#ifdef CONFIG_HPET_TIMER >+ hpet_disable(); >+#endif > } > > void __attribute__((weak)) mach_reboot_fixups(void) >diff -puN >arch/x86/kernel/reboot_64.c~kexec-need-to-disable-hpet >arch/x86/kernel/reboot_64.c >--- >linux-2.6/arch/x86/kernel/reboot_64.c~kexec-need-to-disab >le-hpet 2007-11-24 09:38:23.000000000 +0900 >+++ linux-2.6-hirofumi/arch/x86/kernel/reboot_64.c >2007-11-27 04:57:56.000000000 +0900 >@@ -17,6 +17,7 @@ > #include <asm/pgtable.h> > #include <asm/tlbflush.h> > #include <asm/apic.h> >+#include <asm/hpet.h> > #include <asm/gart.h> > > /* >@@ -113,6 +114,9 @@ void machine_shutdown(void) > > disable_IO_APIC(); > >+#ifdef CONFIG_HPET_TIMER >+ hpet_disable(); >+#endif > local_irq_restore(flags); > > pci_iommu_shutdown(); >diff -puN include/asm-x86/hpet.h~kexec-need-to-disable-hpet >include/asm-x86/hpet.h >--- >linux-2.6/include/asm-x86/hpet.h~kexec-need-to-disable-hpet >2007-11-24 09:38:23.000000000 +0900 >+++ linux-2.6-hirofumi/include/asm-x86/hpet.h 2007-11-27 >04:54:32.000000000 +0900 >@@ -61,6 +61,7 @@ extern unsigned long force_hpet_address; > extern int hpet_force_user; > extern int is_hpet_enabled(void); > extern int hpet_enable(void); >+extern void hpet_disable(void); > extern unsigned long hpet_readl(unsigned long a); > extern void force_hpet_resume(void); > >_ >- >To unsubscribe from this list: send the line "unsubscribe >linux-kernel" in >the body of a message to [EMAIL PROTECTED] >More majordomo info at http://vger.kernel.org/majordomo-info.html >Please read the FAQ at http://www.tux.org/lkml/ > - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/