lkml.org 
[lkml]   [2019]   [Feb]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 094/143] perf/x86/intel/uncore: Add Node ID mask
    Date
    4.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Kan Liang <kan.liang@linux.intel.com>

    commit 9e63a7894fd302082cf3627fe90844421a6cbe7f upstream.

    Some PCI uncore PMUs cannot be registered on an 8-socket system (HPE
    Superdome Flex).

    To understand which Socket the PCI uncore PMUs belongs to, perf retrieves
    the local Node ID of the uncore device from CPUNODEID(0xC0) of the PCI
    configuration space, and the mapping between Socket ID and Node ID from
    GIDNIDMAP(0xD4). The Socket ID can be calculated accordingly.

    The local Node ID is only available at bit 2:0, but current code doesn't
    mask it. If a BIOS doesn't clear the rest of the bits, an incorrect Node ID
    will be fetched.

    Filter the Node ID by adding a mask.

    Reported-by: Song Liu <songliubraving@fb.com>
    Tested-by: Song Liu <songliubraving@fb.com>
    Signed-off-by: Kan Liang <kan.liang@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: <stable@vger.kernel.org> # v3.7+
    Fixes: 7c94ee2e0917 ("perf/x86: Add Intel Nehalem and Sandy Bridge-EP uncore support")
    Link: https://lkml.kernel.org/r/1548600794-33162-1-git-send-email-kan.liang@linux.intel.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>


    ---
    arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c | 4 +++-
    1 file changed, 3 insertions(+), 1 deletion(-)

    --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c
    +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snbep.c
    @@ -1081,6 +1081,8 @@ static struct pci_driver snbep_uncore_pc
    .id_table = snbep_uncore_pci_ids,
    };

    +#define NODE_ID_MASK 0x7
    +
    /*
    * build pci bus to socket mapping
    */
    @@ -1102,7 +1104,7 @@ static int snbep_pci2phy_map_init(int de
    err = pci_read_config_dword(ubox_dev, 0x40, &config);
    if (err)
    break;
    - nodeid = config;
    + nodeid = config & NODE_ID_MASK;
    /* get the Node ID mapping */
    err = pci_read_config_dword(ubox_dev, 0x54, &config);
    if (err)

    \
     
     \ /
      Last update: 2019-02-18 15:26    [W:4.040 / U:0.068 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site