lkml.org 
[lkml]   [2020]   [May]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subject[PATCH v6 0/2] Implement reentrant rtas call
    Date
    Patch 2 implement rtas_call_reentrant() for reentrant rtas-calls:
    "ibm,int-on", "ibm,int-off",ibm,get-xive" and "ibm,set-xive",
    according to LoPAPR Version 1.1 (March 24, 2016).

    For that, it's necessary that every call uses a different
    rtas buffer (rtas_args). Paul Mackerras suggested using the PACA
    structure for creating a per-cpu buffer for these calls.

    Patch 1 was necessary to make PACA have a 'struct rtas_args' member.

    Reentrant rtas calls can be useful to avoid deadlocks in crashing,
    where rtas-calls are needed, but some other thread crashed holding
    the rtas.lock.

    This is a backtrace of a deadlock from a kdump testing environment:

    #0 arch_spin_lock
    #1 lock_rtas ()
    #2 rtas_call (token=8204, nargs=1, nret=1, outputs=0x0)
    #3 ics_rtas_mask_real_irq (hw_irq=4100)
    #4 machine_kexec_mask_interrupts
    #5 default_machine_crash_shutdown
    #6 machine_crash_shutdown
    #7 __crash_kexec
    #8 crash_kexec
    #9 oops_end

    Signed-off-by: Leonardo Bras <leobras.c@gmail.com>

    Special thanks to Nick Piggin, who have been helping me a lot with
    this series!

    ---
    Changes since v5:
    - Renames new paca member from reentrant_args to rtas_args_reentrant
    - Compile out rtas_args_reentrant if CONFIG_PPC_RTAS=n
    - new_rtas_args() is skipped (returns NULL) if CPU_FTR_HVMODE

    Changes since v4:
    - Insted of having the full buffer on PACA, adds only a pointer and
    allocate it during allocate_paca(), making sure it's in a memory
    range available for RTAS (32-bit). (Thanks Nick Piggin!)

    Changes since v3:
    - Adds protection from preemption and interruption

    Changes since v2:
    - Fixed build failure from ppc64e, by including spinlock_types.h on
    rtas-types.h
    - Improved commit messages

    Changes since v1:
    - Moved buffer from stack to PACA (as suggested by Paul Mackerras)
    - Added missing output bits
    - Improve documentation following kernel-doc format (as suggested by
    Nathan Lynch)


    Leonardo Bras (2):
    powerpc/rtas: Move type/struct definitions from rtas.h into
    rtas-types.h
    powerpc/rtas: Implement reentrant rtas call

    arch/powerpc/include/asm/paca.h | 2 +
    arch/powerpc/include/asm/rtas-types.h | 126 ++++++++++++++++++++++++++
    arch/powerpc/include/asm/rtas.h | 119 +-----------------------
    arch/powerpc/kernel/rtas.c | 42 +++++++++
    arch/powerpc/sysdev/xics/ics-rtas.c | 22 ++---
    5 files changed, 183 insertions(+), 128 deletions(-)
    create mode 100644 arch/powerpc/include/asm/rtas-types.h

    --
    2.25.4

    \
     
     \ /
      Last update: 2020-05-19 01:45    [W:2.355 / U:0.140 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site