Thread (40 messages) 40 messages, 2 authors, 2021-05-25

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

From: Joey Gouly <joey.gouly@arm.com>
Date: 2021-05-25 17:03:35

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>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help