cpuidle: remove hpet access in hpet_broadcast_exit

hpet_broadcast_exit calls reprogram_hpet to stop possible hpet intr if
the last deep-cstate waken up cpu is waken by unexpected intrs instead
of hpet broadcast handler. This can be removed without brings much
useless intrs, but bring chance for further optimization. It is a
tradeoff between grace & optimization.

BTW, move the cpumask set out of critial section in
hpet_broadcast_enter to shorten it.

Signed-off-by: Wei Gang <gang.wei@intel.com>
This commit is contained in:
Keir Fraser committed 2010-06-17 08:52:29 +01:00
1 parent cbfacd749c
commit aa42fc0e9c
1 file changed
+1 -7
+1 -7
View File
@@ -664,14 +664,12 @@ void hpet_broadcast_enter(void)
/* Disable LAPIC timer interrupts. */
disable_APIC_timer();
cpu_set(cpu, ch->cpumask);
spin_lock(&ch->lock);
cpu_set(cpu, ch->cpumask);
/* reprogram if current cpu expire time is nearer */
if ( this_cpu(timer_deadline_end) < ch->next_event )
reprogram_hpet_evt_channel(ch, this_cpu(timer_deadline_end), NOW(), 1);
spin_unlock(&ch->lock);
}
@@ -692,11 +690,7 @@ void hpet_broadcast_exit(void)
raise_softirq(TIMER_SOFTIRQ);
spin_lock_irq(&ch->lock);
cpu_clear(cpu, ch->cpumask);
if ( cpus_empty(ch->cpumask) && ch->next_event != STIME_MAX )
reprogram_hpet_evt_channel(ch, STIME_MAX, 0, 0);
spin_unlock_irq(&ch->lock);
if ( ch != &legacy_hpet_event )
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.