Re: [edk2] WaitForEvent Idle Race Condition

2013-02-12 Thread Cohen, Eugene
wait until the interrupt fires. :) Eugene From: Tim Lewis [mailto:tim.le...@insyde.com] Sent: Tuesday, February 12, 2013 2:58 PM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] WaitForEvent Idle Race Condition Especially since WaitForEvent can only be called at TPL_APPLICATION. Pretty

Re: [edk2] WaitForEvent Idle Race Condition

2013-02-12 Thread Tim Lewis
Especially since WaitForEvent can only be called at TPL_APPLICATION. Pretty hard to use in an I/O driver. Tim From: Andrew Fish [mailto:af...@apple.com] Sent: Tuesday, February 12, 2013 1:54 PM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] WaitForEvent Idle Race Condition On Feb 12

Re: [edk2] WaitForEvent Idle Race Condition

2013-02-12 Thread Andrew Fish
> > > From: Andrew Fish [mailto:af...@apple.com] > Sent: Tuesday, February 12, 2013 1:37 PM > To: edk2-devel@lists.sourceforge.net > Subject: Re: [edk2] WaitForEvent Idle Race Condition > > Eugene, > > I think this is the way it works. CoreCheckEvent() and Cor

Re: [edk2] WaitForEvent Idle Race Condition

2013-02-12 Thread Cohen, Eugene
paths (at least for those protocols that make use of events). Eugene From: Andrew Fish [mailto:af...@apple.com] Sent: Tuesday, February 12, 2013 1:37 PM To: edk2-devel@lists.sourceforge.net Subject: Re: [edk2] WaitForEvent Idle Race Condition Eugene, I think this is the way it works. CoreCheck

Re: [edk2] WaitForEvent Idle Race Condition

2013-02-12 Thread Andrew Fish
Eugene, I think this is the way it works. CoreCheckEvent() and CoreSignalEven() both have locks that raise to TPL_HIGH_LEVEL. But we never signal (call an events Notify Function) an event at TPL_HIGH_LEVEL. What if NumberOfEvents > 1 and the 1st event is checked, and then a timer tick happen

[edk2] WaitForEvent Idle Race Condition

2013-02-12 Thread Cohen, Eugene
It appears that there is a race condition in WaitForEvent... after all events are checked the idle event is signaled. But if a timer tick interrupt comes in and schedules work (SignalEvent) after the loop is done but before the event is signaled, we will delay unnecessarily for an additional ti