mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-25 22:35:42 +00:00
SDEI: Unconditionally resume Secure if it was interrupted
Secure world execution nearly always expect a controlled exit to Non-secure world. SDEI interrupts, although targets EL3, occur on behalf of Non-secure world, and may have higher priority than Secure world interrupts. Therefore they might preempt Secure execution, and yield execution to Non-secure SDEI handler. Upon completion of SDEI event handling (regardless of whether it's COPLETE or COMPLETE_AND_RESUME), we must resume Secure execution if it was preempted. Change-Id: I6edd991032588588427ba2fe6c3d7668f7080e3d Signed-off-by: Jeenu Viswambharan <jeenu.viswambharan@arm.com>
This commit is contained in:
parent
98aab97484
commit
90a9213bfb
1 changed files with 2 additions and 3 deletions
|
@ -485,15 +485,14 @@ int sdei_intr_handler(uint32_t intr_raw, uint32_t flags, void *handle,
|
|||
/*
|
||||
* We reach here when client completes the event.
|
||||
*
|
||||
* If the cause of dispatch originally interrupted the Secure world, and
|
||||
* if Non-secure world wasn't allowed to preempt Secure execution,
|
||||
* If the cause of dispatch originally interrupted the Secure world,
|
||||
* resume Secure.
|
||||
*
|
||||
* No need to save the Non-secure context ahead of a world switch: the
|
||||
* Non-secure context was fully saved before dispatch, and has been
|
||||
* returned to its pre-dispatch state.
|
||||
*/
|
||||
if ((sec_state == SECURE) && (ehf_is_ns_preemption_allowed() == 0U))
|
||||
if (sec_state == SECURE)
|
||||
restore_and_resume_secure_context();
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue