• Jeenu Viswambharan's avatar
    SDEI: Make dispatches synchronous · cdb6ac94
    Jeenu Viswambharan authored
    SDEI event dispatches currently only sets up the Non-secure context
    before returning to the caller. The actual dispatch only happens upon
    exiting EL3 next time.
    
    However, for various error handling scenarios, it's beneficial to have
    the dispatch happen synchronously. I.e. when receiving SDEI interrupt,
    or for a successful sdei_dispatch_event() call, the event handler is
    executed; and upon the event completion, dispatcher execution resumes
    after the point of dispatch. The jump primitives introduced in the
    earlier patch facilitates this feature.
    
    With this patch:
    
      - SDEI interrupts and calls to sdei_dispatch_event prepares the NS
        context for event dispatch, then sets a jump point, and immediately
        exits EL3. This results in the client handler executing in
        Non-secure.
    
      - When the SDEI client completes the dispatched event, the SDEI
        dispatcher does a longjmp to the jump pointer created earlier. For
        the caller of the sdei_dispatch_event() in particular, ...
    cdb6ac94
sdei_explicit_dispatch.svg 19.3 KB