Wei, Gang
2009-Apr-30 08:30 UTC
[Xen-devel] [PATCH] cpuidle: Fix for timer_deadline==0 case
cpuidle: Fix for timer_deadline==0 case After the scheduler timer became suspended before entering cpu idle state, the percpu timer_deadline is possible to be 0, i.e. no soft timer in the queue. This case will cause unexpected large residency percentage in C1 for the purely idle cpu. The fix is if timer_deadline == 0, skip most hpet broadcast enter logic because no broadcast is needed for this cpu. Meanwhile strengthen the check in reprogram_hpet_evt_channel, treating (expire <= 0) as a hint for no need to reprogram hpet. Signed-off-by: Wei Gang <gang.wei@intel.com> diff -r f734a724902b xen/arch/x86/hpet.c --- a/xen/arch/x86/hpet.c Mon Apr 27 18:59:56 2009 +0100 +++ b/xen/arch/x86/hpet.c Thu Apr 30 14:45:01 2009 +0800 @@ -122,10 +122,10 @@ static int reprogram_hpet_evt_channel( if ( ch->flags & HPET_EVT_DISALBE ) return 0; - if ( unlikely(expire < 0) ) + if ( unlikely(expire <= 0) ) { - printk(KERN_DEBUG "reprogram: expire < 0\n"); - return -ETIME; + printk(KERN_DEBUG "reprogram: expire <= 0\n"); + return 0; } delta = expire - now; @@ -625,6 +625,9 @@ void hpet_broadcast_enter(void) int cpu = smp_processor_id(); struct hpet_event_channel *ch = per_cpu(cpu_bc_channel, cpu); + if ( this_cpu(timer_deadline) == 0 ) + return; + if ( !ch ) ch = hpet_get_channel(cpu); BUG_ON( !ch ); Jimmy _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Seemingly Similar Threads
- [PATCH] Adjust handle_hpet_broadcast to let it run better before broadcast exit
- [xen-unstable test] 6714: regressions - FAIL
- [PATCH] rename for_each_cpu() to for_each_possible_cpu()
- [PATCH 2/4] CPUIDLE: Avoid remnant LAPIC timer intr while force hpetbroadcast
- [PATCH 0/3] CPUIDLE: enable C1 FFH