RE: [PATCH] x86: disable hpet legacy replacement for kexec
From: Pallipadi, Venkatesh
Date: Tue Nov 27 2007 - 13:17:45 EST
Ack.
Thanks,
Venki
>-----Original Message-----
>From: linux-kernel-owner@xxxxxxxxxxxxxxx
>[mailto:linux-kernel-owner@xxxxxxxxxxxxxxx] On Behalf Of OGAWA Hirofumi
>Sent: Monday, November 26, 2007 1:43 PM
>To: Ingo Molnar
>Cc: Linus Torvalds; linux-kernel@xxxxxxxxxxxxxxx; 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 <hirofumi@xxxxxxxxxxxxxxxxxx>
>
>
>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 <hirofumi@xxxxxxxxxxxxxxxxxx>
>---
>
> 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 majordomo@xxxxxxxxxxxxxxx
>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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/