
Hi Heinrich,
On 15 September 2017 at 02:06, Heinrich Schuchardt xypron.glpk@gmx.de wrote:
For the correct implementation of the task priority level (TPL) calling the notification function must be queued.
Add a status field 'queued' to events.
In function efi_signal_event set status queued if a notification function exists and reset it after we have called the function. A later patch will add a check of the TPL here.
In efi_create_event and efi_close_event unset the queued status.
In function efi_wait_for_event and efi_check_event queue the notification function.
In efi_timer_check call the efi_notify_event if the status queued is set. For all timer events set status signaled.
In efi_console_timer_notify set the signaled state of the WaitForKey event.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de
include/efi_loader.h | 4 +++- lib/efi_loader/efi_boottime.c | 40 ++++++++++++++++++++++++++++++---------- lib/efi_loader/efi_console.c | 4 +++- 3 files changed, 36 insertions(+), 12 deletions(-)
diff --git a/include/efi_loader.h b/include/efi_loader.h index f74b33d589..25398ba40c 100644 --- a/include/efi_loader.h +++ b/include/efi_loader.h @@ -131,7 +131,8 @@ struct efi_object {
- @nofify_function: Function to call when the event is triggered
- @notify_context: Data to be passed to the notify function
- @trigger_type: Type of timer, see efi_set_timer
- @signaled: The notify function was already called
- @queued: The notification functionis queued
functions
What does this actually mean? Can you expand the comment a bit? I'm not sure what a value of (for example) 3 would mean. Or if it is just *whether* the function is queued, then you could use a bool.
- @signaled: The event occured
occurred