diff --git a/docs/porting-guide.rst b/docs/porting-guide.rst index dbbd102..3ea95a1 100644 --- a/docs/porting-guide.rst +++ b/docs/porting-guide.rst @@ -2022,9 +2022,9 @@ Critical SDEI events on the platform. This must have a lower value (therefore of higher priority) than ``PLAT_SDEI_NORMAL_PRI``. -It's recommended that SDEI exception priorities in general are assigned the -lowest among Secure priorities. Among the SDEI exceptions, Critical SDEI -priority must be higher than Normal SDEI priority. +**Note**: SDEI exception priorities must be the lowest among Secure priorities. +Among the SDEI exceptions, Critical SDEI priority must be higher than Normal +SDEI priority. Functions ......... diff --git a/services/std_svc/sdei/sdei_intr_mgmt.c b/services/std_svc/sdei/sdei_intr_mgmt.c index 42bf46d..2717ea4 100644 --- a/services/std_svc/sdei/sdei_intr_mgmt.c +++ b/services/std_svc/sdei/sdei_intr_mgmt.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, ARM Limited and Contributors. All rights reserved. + * Copyright (c) 2017-2018, ARM Limited and Contributors. All rights reserved. * * SPDX-License-Identifier: BSD-3-Clause */ @@ -556,7 +556,7 @@ unsigned int client_el = sdei_client_el(); /* Return error if called without an active event */ - disp_ctx = pop_dispatch(); + disp_ctx = get_outstanding_dispatch(); if (!disp_ctx) return SDEI_EDENY; @@ -566,15 +566,8 @@ map = disp_ctx->map; assert(map); - se = get_event_entry(map); - SDEI_LOG("EOI:%lx, %d spsr:%lx elr:%lx\n", read_mpidr_el1(), - map->ev_num, read_spsr_el3(), read_elr_el3()); - - if (is_event_shared(map)) - sdei_map_lock(map); - act = resume ? DO_COMPLETE_RESUME : DO_COMPLETE; if (!can_sdei_state_trans(se, act)) { if (is_event_shared(map)) @@ -582,6 +575,15 @@ return SDEI_EDENY; } + /* Having done sanity checks, pop dispatch */ + pop_dispatch(); + + SDEI_LOG("EOI:%lx, %d spsr:%lx elr:%lx\n", read_mpidr_el1(), + map->ev_num, read_spsr_el3(), read_elr_el3()); + + if (is_event_shared(map)) + sdei_map_lock(map); + /* * Restore Non-secure to how it was originally interrupted. Once done, * it's up-to-date with the saved copy.