xen-devel
[Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time
On 21/04/2010 10:36, "Wei, Gang" <gang.wei@xxxxxxxxx> wrote:
>> Okay, then CPU A executes hpet_broadcast_enter() and programs the HPET
>> channel for its timeout X. Meanwhile concurrently executing
>> handle_hpet_broadcast misses CPU A but finds some other CPU B with
>> timeout Y much later than X, and erroneously programs the HPET
>> channel with Y, causing CPU A to miss its deadline by an arbitrary
>> amount.
>
> It is also not possible. handle_hpet_broadcast reprogram HPET just while
> next_event < ch->next_event. Here next_evet is Y, and ch->next_event is X. :-)
Ah yes, I spotted that just after I replied! Okay I'm almost convinced now,
but...
>> I dare say I can carry on finding races. :-)
>
> Please go on... The two racing conditions you mentioned were just considered
> before I resent the patch. :-D
Okay, one concern I still have is over possible races around
cpuidle_wakeup_mwait(). It makes use of a cpumask cpuidle_mwait_flags,
avoiding an IPI to cpus in the mask. However, there is nothing to stop the
CPU having cleared itself from that cpumask before cpuidle does the write to
softirq_pending. In that case, even assuming the CPU is now non-idle and so
wakeup is spurious, a subsequent attempt to raise_softirq(TIMER_SOFTIRQ)
will incorrectly not IPI because the flag is already set in softirq_pending?
This race would be benign in the current locking strategy (without your
patch) because the CPU that has left mwait_idle_with_hints() cannot get
further than hpet_broadcast_exit() because it will spin on ch->lock, and
there is a guaranteed check of softirq_pending at some point after that.
However your patch removes that synchronisation because ch->lock is not held
across cpuidle_wakeup_mwait().
What do you think to that?
-- Keir
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- [Xen-devel] RE: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- [Xen-devel] RE: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] RE: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- [Xen-devel] RE: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- [Xen-devel] RE: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time,
Keir Fraser <=
- Re: [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- Re: [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- Re: [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- RE: [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
- [Xen-devel] Re: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Keir Fraser
- [Xen-devel] RE: [PATCH] CPUIDLE: shorten hpet spin_lock holding time, Wei, Gang
|
|
|