[ipxe-devel] EFI TPL for efi_currticks()
Petr Borsodi
petr.borsodi at gmail.com
Tue Dec 8 16:22:30 UTC 2020
Hi,
why efi_currticks function restores the TPL to an "external" TPL (especially TPL_APPLICATION) and raises it back to TPL_CALLBACK?
This would not be necessary if the timer used TPL_NOTIFY for its event.
The current solution also has the disadvantage that it can surprisingly run different code on the TPL_CALLBACK during TPL restoring.
Proposed change:
diff --git a/src/interface/efi/efi_timer.c b/src/interface/efi/efi_timer.c
--- a/src/interface/efi/efi_timer.c
+++ b/src/interface/efi/efi_timer.c
@@ -135,9 +100,6 @@ static unsigned long efi_currticks ( void ) {
*/
if ( efi_shutdown_in_progress ) {
efi_jiffies++;
- } else {
- bs->RestoreTPL ( efi_external_tpl );
- bs->RaiseTPL ( TPL_CALLBACK );
}
return ( efi_jiffies * ( TICKS_PER_SEC / EFI_JIFFIES_PER_SEC ) );
@@ -167,7 +129,7 @@ static void efi_tick_startup ( void ) {
/* Create timer tick event */
if ( ( efirc = bs->CreateEvent ( ( EVT_TIMER | EVT_NOTIFY_SIGNAL ),
- TPL_CALLBACK, efi_tick, NULL,
+ TPL_NOTIFY, efi_tick, NULL,
&efi_tick_event ) ) != 0 ) {
rc = -EEFI ( efirc );
DBGC ( colour, "EFI could not create timer tick: %s\n",
Petr Borsodi
More information about the ipxe-devel
mailing list