lkml.org 
[lkml]   [2020]   [Dec]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 210/453] powerpc/perf: Fix crash with is_sier_available when pmu is not set
    Date
    From: Athira Rajeev <atrajeev@linux.vnet.ibm.com>

    [ Upstream commit f75e7d73bdf73f07b0701a6d21c111ef5d9021dd ]

    On systems without any specific PMU driver support registered, running
    'perf record' with —intr-regs will crash ( perf record -I <workload> ).

    The relevant portion from crash logs and Call Trace:

    Unable to handle kernel paging request for data at address 0x00000068
    Faulting instruction address: 0xc00000000013eb18
    Oops: Kernel access of bad area, sig: 11 [#1]
    CPU: 2 PID: 13435 Comm: kill Kdump: loaded Not tainted 4.18.0-193.el8.ppc64le #1
    NIP: c00000000013eb18 LR: c000000000139f2c CTR: c000000000393d80
    REGS: c0000004a07ab4f0 TRAP: 0300 Not tainted (4.18.0-193.el8.ppc64le)
    NIP [c00000000013eb18] is_sier_available+0x18/0x30
    LR [c000000000139f2c] perf_reg_value+0x6c/0xb0
    Call Trace:
    [c0000004a07ab770] [c0000004a07ab7c8] 0xc0000004a07ab7c8 (unreliable)
    [c0000004a07ab7a0] [c0000000003aa77c] perf_output_sample+0x60c/0xac0
    [c0000004a07ab840] [c0000000003ab3f0] perf_event_output_forward+0x70/0xb0
    [c0000004a07ab8c0] [c00000000039e208] __perf_event_overflow+0x88/0x1a0
    [c0000004a07ab910] [c00000000039e42c] perf_swevent_hrtimer+0x10c/0x1d0
    [c0000004a07abc50] [c000000000228b9c] __hrtimer_run_queues+0x17c/0x480
    [c0000004a07abcf0] [c00000000022aaf4] hrtimer_interrupt+0x144/0x520
    [c0000004a07abdd0] [c00000000002a864] timer_interrupt+0x104/0x2f0
    [c0000004a07abe30] [c0000000000091c4] decrementer_common+0x114/0x120

    When perf record session is started with "-I" option, capturing registers
    on each sample calls is_sier_available() to check for the
    SIER (Sample Instruction Event Register) availability in the platform.
    This function in core-book3s accesses 'ppmu->flags'. If a platform specific
    PMU driver is not registered, ppmu is set to NULL and accessing its
    members results in a crash. Fix the crash by returning false in
    is_sier_available() if ppmu is not set.

    Fixes: 333804dc3b7a ("powerpc/perf: Update perf_regs structure to include SIER")
    Reported-by: Sachin Sant <sachinp@linux.vnet.ibm.com>
    Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Link: https://lore.kernel.org/r/1606185640-1720-1-git-send-email-atrajeev@linux.vnet.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/perf/core-book3s.c | 3 +++
    1 file changed, 3 insertions(+)

    diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-book3s.c
    index f582aa2d98078..7bf1adcdfdaa1 100644
    --- a/arch/powerpc/perf/core-book3s.c
    +++ b/arch/powerpc/perf/core-book3s.c
    @@ -133,6 +133,9 @@ static void pmao_restore_workaround(bool ebb) { }

    bool is_sier_available(void)
    {
    + if (!ppmu)
    + return false;
    +
    if (ppmu->flags & PPMU_HAS_SIER)
    return true;

    --
    2.27.0


    \
     
     \ /
      Last update: 2020-12-28 14:49    [W:6.107 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site