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

[Xen-changelog] [xen-unstable] x86 Cx: Add option hpetbroadcast to force enabling hpet_broadcast.



# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1216213054 -3600
# Node ID 806e66a6cb1a19a25c9db33fa35a3294280f5d94
# Parent  099aaca15ae6e9339c7c32d9488688ce99b37f5c
x86 Cx: Add option hpetbroadcast to force enabling hpet_broadcast.

This option can be used for test & experiment purpose.

Signed-off-by: Wei Gang <gang.wei@xxxxxxxxx>
---
 xen/arch/x86/time.c |   41 ++++++++++++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 13 deletions(-)

diff -r 099aaca15ae6 -r 806e66a6cb1a xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Wed Jul 16 13:54:02 2008 +0100
+++ b/xen/arch/x86/time.c       Wed Jul 16 13:57:34 2008 +0100
@@ -1079,22 +1079,37 @@ void __init early_time_init(void)
     setup_irq(0, &irq0);
 }
 
+/* force_hpet_broadcast: if true, force using hpet_broadcast to fix lapic stop
+   issue for deep C state with pit disabled */
+static int force_hpet_broadcast;
+boolean_param("hpetbroadcast", force_hpet_broadcast);
+
 /* keep pit enabled for pit_broadcast working while cpuidle enabled */
 static int disable_pit_irq(void)
 {
-    if ( !using_pit && cpu_has_apic && !xen_cpuidle )
-    {
-        /* Disable PIT CH0 timer interrupt. */
-        outb_p(0x30, PIT_MODE);
-        outb_p(0, PIT_CH0);
-        outb_p(0, PIT_CH0);
-
-        /*
-         * If we do not rely on PIT CH0 then we can use HPET for one-shot
-         * timer emulation when entering deep C states.
-         */
-        /*hpet_broadcast_init(); XXX dom0 may rely on RTC interrupt delivery */
-    }
+    if ( using_pit || !cpu_has_apic || (xen_cpuidle && !force_hpet_broadcast) )
+        return 0;
+
+    /*
+     * If we do not rely on PIT CH0 then we can use HPET for one-shot timer 
+     * emulation when entering deep C states.
+     * XXX dom0 may rely on RTC interrupt delivery, so only enable
+     * hpet_broadcast if force_hpet_broadcast.
+     */
+    if ( xen_cpuidle && force_hpet_broadcast )
+    {
+        hpet_broadcast_init();
+        if ( !hpet_broadcast_is_available() )
+        {
+            printk("HPET broadcast init failed, turn to PIT broadcast.\n");
+            return 0;
+        }
+    }
+
+    /* Disable PIT CH0 timer interrupt. */
+    outb_p(0x30, PIT_MODE);
+    outb_p(0, PIT_CH0);
+    outb_p(0, PIT_CH0);
 
     return 0;
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.