lkml.org 
[lkml]   [2020]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.8 123/186] ARC: perf: dont bail setup if pct irq missing in device-tree
    Date
    From: Vineet Gupta <vgupta@synopsys.com>

    commit feb92d7d3813456c11dce215b3421801a78a8986 upstream.

    Current code inadventely bails if hardware supports sampling/overflow
    interrupts, but the irq is missing from device tree.

    |
    | # perf stat -e cycles,instructions,major-faults,minor-faults ../hackbench
    | Running with 10 groups 400 process
    | Time: 0.921
    |
    | Performance counter stats for '../hackbench':
    |
    | <not supported> cycles
    | <not supported> instructions
    | 0 major-faults
    | 8679 minor-faults

    This need not be as we can still do simple counting based perf stat.
    This unborks perf on HSDK-4xD

    Cc: <stable@vger.kernel.org>
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/arc/kernel/perf_event.c | 14 ++++----------
    1 file changed, 4 insertions(+), 10 deletions(-)

    --- a/arch/arc/kernel/perf_event.c
    +++ b/arch/arc/kernel/perf_event.c
    @@ -562,7 +562,7 @@ static int arc_pmu_device_probe(struct p
    {
    struct arc_reg_pct_build pct_bcr;
    struct arc_reg_cc_build cc_bcr;
    - int i, has_interrupts;
    + int i, has_interrupts, irq;
    int counter_size; /* in bits */

    union cc_name {
    @@ -637,13 +637,7 @@ static int arc_pmu_device_probe(struct p
    .attr_groups = arc_pmu->attr_groups,
    };

    - if (has_interrupts) {
    - int irq = platform_get_irq(pdev, 0);
    -
    - if (irq < 0) {
    - pr_err("Cannot get IRQ number for the platform\n");
    - return -ENODEV;
    - }
    + if (has_interrupts && (irq = platform_get_irq(pdev, 0) >= 0)) {

    arc_pmu->irq = irq;

    @@ -652,9 +646,9 @@ static int arc_pmu_device_probe(struct p
    this_cpu_ptr(&arc_pmu_cpu));

    on_each_cpu(arc_cpu_pmu_irq_init, &irq, 1);
    -
    - } else
    + } else {
    arc_pmu->pmu.capabilities |= PERF_PMU_CAP_NO_INTERRUPT;
    + }

    /*
    * perf parser doesn't really like '-' symbol in events name, so let's

    \
     
     \ /
      Last update: 2020-09-08 21:32    [W:4.062 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site