RE: [PATCH] x86: disable hpet legacy replacement for kexec

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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; [email protected]; 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/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux