From: Jonathan Gray Date: Sun, 12 Mar 2017 08:26:06 +0000 (+1100) Subject: efi_loader: run CreateEvent() notify function based on flags X-Git-Tag: v2017.07~38^2~5 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=37a980b3fa0b0ad26b16b7b9b9dbb25b0075a06b;p=oweals%2Fu-boot.git efi_loader: run CreateEvent() notify function based on flags The UEFI specification states that the tpl, function and context arguments are to be ignored if neither EVT_NOTIFY_WAIT or EVT_NOTIFY_SIGNAL are specified. This matches observed behaviour with an AMI EDK2 based UEFI implementation. Skip calling the notify function if neither flag is present. Signed-off-by: Jonathan Gray Acked-By: Heinrich Schuchardt Signed-off-by: Alexander Graf --- diff --git a/include/efi_api.h b/include/efi_api.h index 5c3836a51b..f071b36b53 100644 --- a/include/efi_api.h +++ b/include/efi_api.h @@ -28,6 +28,9 @@ enum efi_event_type { EFI_TIMER_RELATIVE = 2 }; +#define EVT_NOTIFY_WAIT 0x00000100 +#define EVT_NOTIFY_SIGNAL 0x00000200 + /* EFI Boot Services table */ struct efi_boot_services { struct efi_table_hdr hdr; diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c index 51080cbeed..eb5946a959 100644 --- a/lib/efi_loader/efi_boottime.c +++ b/lib/efi_loader/efi_boottime.c @@ -210,7 +210,9 @@ void efi_timer_check(void) /* Triggering! */ if (efi_event.trigger_type == EFI_TIMER_PERIODIC) efi_event.trigger_next += efi_event.trigger_time / 10; - efi_event.notify_function(&efi_event, efi_event.notify_context); + if (efi_event.type & (EVT_NOTIFY_WAIT | EVT_NOTIFY_SIGNAL)) + efi_event.notify_function(&efi_event, + efi_event.notify_context); } WATCHDOG_RESET();