|
|
|
|
|
|
|
|
|
|
xen-devel
[Xen-devel] [PATCH]Add option hpetbroadcast to force enabling hpet_broad
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
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] [PATCH]Add option hpetbroadcast to force enabling hpet_broadcast,
Wei, Gang <=
|
|
|
|
|