Re: [PATCH v2 02/19] arm64: entry: unmask IRQ+FIQ after EL0 handling

Joey Gouly
2021-05-25T17:03:35Z

On Wed, May 19, 2021 at 01:38:45PM +0100, Mark Rutland wrote:
> For non-fatal exceptions taken from EL0, we expect that at some point
> during exception handling it is possible to return to a regular process
> context with all exceptions unmasked (e.g. as we do in
> do_notify_resume()), and we generally aim to unmask exceptions wherever
> possible.
>
> While handling SError and debug exceptions from EL0, we need to leave
> some exceptions masked during handling. Handling SError requires us to
> mask SError (which also requires masking IRQ+FIQ), and handing debug
> exceptions requires us to mask debug (which also requires masking
> SError+IRQ+FIQ).
>
> Once do_serror() or do_debug_exception() has returned, we no longer need
> to mask exceptions, and can unmask them all, which is what we did prior
> to commit:
>
> 9034f6251572a474 ("arm64: Do not enable IRQs for ct_user_exit")
>
> ... where we had to mask IRQs as for context_tracking_user_exit()
> expected IRQs to be masked.
>
> Since then, we realised that our context tracking wasn't entirely
> correct, and reworked the entry code to fix this. As of commit:
>
> 23529049c6842382 ("arm64: entry: fix non-NMI user<->kernel transitions")
>
> ... we consistently call context_tracking_user_exit() later as part of
> ret_to_user. Prior to this we can transiently unmask exceptions (e.g. as
> part of do_notify_resume), and we always mask all exceptions prior to
> calling context_tracking_user_exit().
>
> Thus, there's no longer a reason to leave IRQs or FIQs masked at the end
> of el0_dbg() or el0_error(), so let's bring these into line with other
> EL0 exceptions handlers and unmask all exceptions after the handler is
> finished.
>

We discussed some changes to the commit message offline, otherwise:

Reviewed-by: Joey Gouly <joey.gouly@arm.com>