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

[Xen-devel] [PATCH]Add option hpetbroadcast to force enabling hpet_broadcast


  • To: <xen-devel@xxxxxxxxxxxxxxxxxxx>
  • From: "Wei, Gang" <gang.wei@xxxxxxxxx>
  • Date: Wed, 16 Jul 2008 13:52:26 +0800
  • Cc: Keir Fraser <keir.fraser@xxxxxxxxxxxxx>
  • Delivery-date: Tue, 15 Jul 2008 22:53:49 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>
  • Thread-index: AcjnCCBRUlUUaMJLQ42ltFGtCQAcYg==
  • Thread-topic: [PATCH]Add option hpetbroadcast to force enabling hpet_broadcast

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>

diff -r e7d4c937c92e xen/arch/x86/time.c
--- a/xen/arch/x86/time.c       Wed Jul 16 11:04:41 2008 +0800
+++ b/xen/arch/x86/time.c       Wed Jul 16 11:33:56 2008 +0800
@@ -1035,21 +1035,36 @@ 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 )
+    if ( !using_pit && cpu_has_apic && (!xen_cpuidle ||
force_hpet_broadcast) )
     {
-        /* 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 */
+        /* 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, fall back 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-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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