• Mark Rutland's avatar
    arm64: entry: move bulk of ret_to_user to C · 4d1c2ee2
    Mark Rutland authored
    In `ret_to_user` we perform some conditional work depending on the
    thread flags, then perform some IRQ/context tracking which is intended
    to balance with the IRQ/context tracking performed in the entry C code.
    
    For simplicity and consistency, it would be preferable to move this all
    to C. As a step towards that, this patch moves the conditional work and
    IRQ/context tracking into a C helper function. To aid bisectability,
    this is called from the `ret_to_user` assembly, and a subsequent patch
    will move the call to C code.
    
    As local_daif_mask() handles all necessary tracing and PMR manipulation,
    we no longer need to handle this explicitly. As we call
    exit_to_user_mode() directly, the `user_enter_irqoff` macro is no longer
    used, and can be removed. As enter_from_user_mode() and
    exit_to_user_mode() are no longer called from assembly, these can be
    made static, and as these are typically very small, they are marked
    __always_inline to avoid the overhead of a function call.
    
    For now, enablement of single-step is left in entry.S, and for this we
    still need to read the flags in ret_to_user(). It is safe to read this
    separately as TIF_SINGLESTEP is not part of _TIF_WORK_MASK.
    
    There should be no functional change as a result of this patch.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Joey Gouly <joey.gouly@arm.com>
    Cc: Marc Zyngier <maz@kernel.org>
    Cc: Will Deacon <will@kernel.org>
    Reviewed-by: default avatarJoey Gouly <joey.gouly@arm.com>
    Link: https://lore.kernel.org/r/20210802140733.52716-4-mark.rutland@arm.com
    [catalin.marinas@arm.com: removed unused gic_prio_kentry_setup macro]
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    4d1c2ee2
signal.c 24.5 KB