Resend.
Disable HPET in Xen pv dom0
Xen is using HPET to wakeup cpu from deep c-states, so the HPET usage in dom0
must be fobidden. In 2.6.18-xen, the HPET was by default disabled in config
file. For upstream kernel built for pv dom0, it is not practical to disable dom0
HPET usage in that way because the same image may be also using as bare metal
kernerl. So do it in Xen specific setup code.
Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx>
diff --git a/arch/x86/kernel/hpet.c b/arch/x86/kernel/hpet.c
index 9b32c88..366e1e5 100644
--- a/arch/x86/kernel/hpet.c
+++ b/arch/x86/kernel/hpet.c
@@ -96,7 +96,7 @@ static int __init hpet_setup(char *str)
}
__setup("hpet=", hpet_setup);
-static int __init disable_hpet(char *str)
+int __init disable_hpet(char *str)
{
boot_hpet_disable = 1;
return 1;
diff --git a/arch/x86/xen/setup.c b/arch/x86/xen/setup.c
index 5eeeedb..c73381b 100644
--- a/arch/x86/xen/setup.c
+++ b/arch/x86/xen/setup.c
@@ -34,6 +34,12 @@ extern void xen_sysenter_target(void);
extern void xen_syscall_target(void);
extern void xen_syscall32_target(void);
+#ifdef CONFIG_HPET_TIMER
+extern int __init disable_hpet(char *str);
+#else
+static inline int disable_hpet(char *str) { return 0; }
+#endif
+
static unsigned long __init xen_release_chunk(phys_addr_t start_addr,
phys_addr_t end_addr)
{
struct xen_memory_reservation reservation = {
@@ -282,6 +288,12 @@ void __init xen_arch_setup(void)
}
#endif
+ /*
+ * Xen hypervisor uses HPET to wakeup cpu from deep c-states,
+ * so the HPET usage in dom0 must be forbidden.
+ */
+ disable_hpet(NULL);
+
memcpy(boot_command_line, xen_start_info->cmd_line,
MAX_GUEST_CMDLINE > COMMAND_LINE_SIZE ?
COMMAND_LINE_SIZE : MAX_GUEST_CMDLINE);
pv-dom0-nohpet-v3.patch
Description: pv-dom0-nohpet-v3.patch
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|