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.10 284/717] powerpc/perf: Fix the PMU group constraints for threshold events in power10
    Date
    From: Athira Rajeev <atrajeev@linux.vnet.ibm.com>

    [ Upstream commit 0263bbb377af0c2d38bc8b2ad2ff147e240094de ]

    The PMU group constraints mask for threshold events covers
    all thresholding bits which includes threshold control value
    (start/stop), select value as well as thresh_cmp value (MMCRA[9:18].
    In power9, thresh_cmp bits were part of the event code. But in case
    of power10, thresh_cmp bits are not part of event code due to
    inclusion of MMCR3 bits. Hence thresh_cmp is not valid for
    group constraints for power10.

    Fix the PMU group constraints checking for threshold events in
    power10 by using constraint mask and value for only threshold control
    and select bits.

    Fixes: a64e697cef23 ("powerpc/perf: power10 Performance Monitoring support")
    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/1606409684-1589-4-git-send-email-atrajeev@linux.vnet.ibm.com
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/powerpc/perf/isa207-common.c | 7 ++++++-
    arch/powerpc/perf/isa207-common.h | 3 +++
    2 files changed, 9 insertions(+), 1 deletion(-)

    diff --git a/arch/powerpc/perf/isa207-common.c b/arch/powerpc/perf/isa207-common.c
    index 38ed450c78557..0f4983ef41036 100644
    --- a/arch/powerpc/perf/isa207-common.c
    +++ b/arch/powerpc/perf/isa207-common.c
    @@ -351,7 +351,12 @@ int isa207_get_constraint(u64 event, unsigned long *maskp, unsigned long *valp)
    value |= CNST_SAMPLE_VAL(event >> EVENT_SAMPLE_SHIFT);
    }

    - if (cpu_has_feature(CPU_FTR_ARCH_300)) {
    + if (cpu_has_feature(CPU_FTR_ARCH_31)) {
    + if (event_is_threshold(event)) {
    + mask |= CNST_THRESH_CTL_SEL_MASK;
    + value |= CNST_THRESH_CTL_SEL_VAL(event >> EVENT_THRESH_SHIFT);
    + }
    + } else if (cpu_has_feature(CPU_FTR_ARCH_300)) {
    if (event_is_threshold(event) && is_thresh_cmp_valid(event)) {
    mask |= CNST_THRESH_MASK;
    value |= CNST_THRESH_VAL(event >> EVENT_THRESH_SHIFT);
    diff --git a/arch/powerpc/perf/isa207-common.h b/arch/powerpc/perf/isa207-common.h
    index dc9c3d22fb38d..42087643c3331 100644
    --- a/arch/powerpc/perf/isa207-common.h
    +++ b/arch/powerpc/perf/isa207-common.h
    @@ -149,6 +149,9 @@
    #define CNST_THRESH_VAL(v) (((v) & EVENT_THRESH_MASK) << 32)
    #define CNST_THRESH_MASK CNST_THRESH_VAL(EVENT_THRESH_MASK)

    +#define CNST_THRESH_CTL_SEL_VAL(v) (((v) & 0x7ffull) << 32)
    +#define CNST_THRESH_CTL_SEL_MASK CNST_THRESH_CTL_SEL_VAL(0x7ff)
    +
    #define CNST_EBB_VAL(v) (((v) & EVENT_EBB_MASK) << 24)
    #define CNST_EBB_MASK CNST_EBB_VAL(EVENT_EBB_MASK)

    --
    2.27.0


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