lkml.org 
[lkml]   [2019]   [Jan]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH v9 24/26] arm64: Skip preemption when exiting an NMI
    On Mon, 21 Jan 2019 15:33:43 +0000,
    Julien Thierry <julien.thierry@arm.com> wrote:
    >
    > Handling of an NMI should not set any TIF flags. For NMIs received from
    > EL0 the current exit path is safe to use.
    >
    > However, an NMI received at EL1 could have interrupted some task context
    > that has set the TIF_NEED_RESCHED flag. Preempting a task should not
    > happen as a result of an NMI.
    >
    > Skip preemption after handling an NMI from EL1.
    >
    > Signed-off-by: Julien Thierry <julien.thierry@arm.com>
    > Cc: Catalin Marinas <catalin.marinas@arm.com>
    > Cc: Will Deacon <will.deacon@arm.com>
    > Cc: Marc Zyngier <marc.zyngier@arm.com>
    > ---
    > arch/arm64/kernel/entry.S | 8 ++++++++
    > 1 file changed, 8 insertions(+)
    >
    > diff --git a/arch/arm64/kernel/entry.S b/arch/arm64/kernel/entry.S
    > index 35a47f6..a0b0a22 100644
    > --- a/arch/arm64/kernel/entry.S
    > +++ b/arch/arm64/kernel/entry.S
    > @@ -624,6 +624,14 @@ el1_irq:
    >
    > #ifdef CONFIG_PREEMPT
    > ldr x24, [tsk, #TSK_TI_PREEMPT] // get preempt count
    > +alternative_if ARM64_HAS_IRQ_PRIO_MASKING
    > + /*
    > + * DA_F were cleared at start of handling. If anything is set in DAIF,
    > + * we come back from an NMI, so skip preemption
    > + */
    > + mrs x0, daif
    > + orr x24, x24, x0
    > +alternative_else_nop_endif
    > cbnz x24, 1f // preempt count != 0
    > bl el1_preempt
    > 1:

    I find this a bit ugly, as what we have in x24 is not the preempt
    count anymore. Maybe amend the comment above?

    The code being nonetheless correct:

    Acked-by: Marc Zyngier <marc.zyngier@arm.com>

    M.

    --
    Jazz is not dead, it just smell funny.
    \
     
     \ /
      Last update: 2019-01-28 13:34    [W:5.204 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site