Commit-ID:  12c15302dd4b768105d4b7a487ed4858ccab94fc
Gitweb:     http://git.kernel.org/tip/12c15302dd4b768105d4b7a487ed4858ccab94fc
Author:     Jiri Olsa <jo...@kernel.org>
AuthorDate: Thu, 24 Aug 2017 10:57:32 +0200
Committer:  Arnaldo Carvalho de Melo <a...@redhat.com>
CommitDate: Mon, 28 Aug 2017 11:05:10 -0300

perf c2c: Fix remote HITM detection for Skylake

Skylake introduced new mem_remote bit in union perf_mem_data_src [1].
It applies to any other memory level to express Remote unknown level, as
is reported by Skylake.

Adding this extra check to c2c_decode_stats to properly decode remote
HITMs on Skylake.

[1] http://lkml.kernel.org/r/20170816222156.19953-4-a...@firstfloor.org

Signed-off-by: Jiri Olsa <jo...@kernel.org>
Acked-by: Andi Kleen <a...@linux.intel.com>
Cc: Alexander Shishkin <alexander.shish...@linux.intel.com>
Cc: David Ahern <dsah...@gmail.com>
Cc: Joe Mario <jma...@redhat.com>
Cc: Namhyung Kim <namhy...@kernel.org>
Cc: Peter Zijlstra <a.p.zijls...@chello.nl>
Link: http://lkml.kernel.org/r/20170824085732.28481-1-jo...@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <a...@redhat.com>
---
 tools/perf/util/mem-events.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/tools/perf/util/mem-events.c b/tools/perf/util/mem-events.c
index ced4f3f..28afe5f 100644
--- a/tools/perf/util/mem-events.c
+++ b/tools/perf/util/mem-events.c
@@ -316,6 +316,11 @@ int c2c_decode_stats(struct c2c_stats *stats, struct 
mem_info *mi)
        u64 lvl    = data_src->mem_lvl;
        u64 snoop  = data_src->mem_snoop;
        u64 lock   = data_src->mem_lock;
+       /*
+        * Skylake might report unknown remote level via this
+        * bit, consider it when evaluating remote HITMs.
+        */
+       bool mrem  = data_src->mem_remote;
        int err = 0;
 
 #define HITM_INC(__f)          \
@@ -361,7 +366,8 @@ do {                                \
                        }
 
                        if ((lvl & P(LVL, REM_RAM1)) ||
-                           (lvl & P(LVL, REM_RAM2))) {
+                           (lvl & P(LVL, REM_RAM2)) ||
+                            mrem) {
                                stats->rmt_dram++;
                                if (snoop & P(SNOOP, HIT))
                                        stats->ld_shared++;
@@ -371,7 +377,8 @@ do {                                \
                }
 
                if ((lvl & P(LVL, REM_CCE1)) ||
-                   (lvl & P(LVL, REM_CCE2))) {
+                   (lvl & P(LVL, REM_CCE2)) ||
+                    mrem) {
                        if (snoop & P(SNOOP, HIT))
                                stats->rmt_hit++;
                        else if (snoop & P(SNOOP, HITM))

Reply via email to