All,
This mail is to bring another approach to solve the stack-overflow due to 
nested interrupts. Michael solved this problem in OVMF through 
NestedInterruptTplLib.

I made a draft patch as attached "DxeCore.diff". The patch simply to avoid the 
interrupt in enable state when TPL is dropped to the interrupted TPL. The 
interrupt will be enabled later through "IRET".

So, a timer driver has two ways to implement its timer interrupt handler:

1.      Do raise/restore TPL in the TimerInterruptHandler(). But call the APIs 
in NestedInterruptTplLib.

2.      Do not raise/restore TPL in the TimerInterruptHandler(). So that only 
DxeCore restores the TPL. And when DxeCore restores the TPL, the interrupt is 
not enabled when TPL is dropped to the interrupted TPL (as it will be enabled 
later by "IRET").


Implementing the logic in DxeCore does not prevent the TimerInterruptHandler() 
from implementing the way #1.
Agree on the draft patch?

My 2nd question is can we set a rule that TimerInterruptHandler() should NOT 
restore TPL so that way #2 (changing DxeCore) is enough to solve the stack 
overflow issue due to nested interrupts.

I was aware of the discussion between Laszlo and Michael in end of 2022 but 
never dig deeply as today into this problem.
I really appreciate the long discussion in the bugzilla 
(https://bugzilla.tianocore.org/show_bug.cgi?id=4162) and comments in 
NestedInterruptTplLib. I learned a lot from them and they are quite interesting!

Thanks,
Ray


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114369): https://edk2.groups.io/g/devel/message/114369
Mute This Topic: https://groups.io/mt/103950154/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: 
https://edk2.groups.io/g/devel/leave/9847357/21656/1706620634/xyzzy 
[arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Attachment: DxeCore.diff
Description: DxeCore.diff

Reply via email to