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 _______________________________________________ ipxe-devel mailing list ipxe-devel@lists.ipxe.org https://lists.ipxe.org/mailman/listinfo/ipxe-devel