[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |