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
Apparently Analagous 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
