--- /dev/null
+From 57ddf09173c1e7d0511ead8924675c7198e56545 Mon Sep 17 00:00:00 2001
+From: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
+Date: Fri, 16 Nov 2018 09:58:43 +0530
+Subject: perf stat: Fix shadow stats for clock events
+
+From: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
+
+commit 57ddf09173c1e7d0511ead8924675c7198e56545 upstream.
+
+Commit 0aa802a79469 ("perf stat: Get rid of extra clock display
+function") introduced scale and unit for clock events. Thus,
+perf_stat__update_shadow_stats() now saves scaled values of clock events
+in msecs, instead of original nsecs. But while calculating values of
+shadow stats we still consider clock event values in nsecs. This results
+in a wrong shadow stat values. Ex,
+
+ # ./perf stat -e task-clock,cycles ls
+ <SNIP>
+ 2.60 msec task-clock:u # 0.877 CPUs utilized
+ 2,430,564 cycles:u # 1215282.000 GHz
+
+Fix this by saving original nsec values for clock events in
+perf_stat__update_shadow_stats(). After patch:
+
+ # ./perf stat -e task-clock,cycles ls
+ <SNIP>
+ 3.14 msec task-clock:u # 0.839 CPUs utilized
+ 3,094,528 cycles:u # 0.985 GHz
+
+Suggested-by: Jiri Olsa <jolsa@redhat.com>
+Reported-by: Anton Blanchard <anton@samba.org>
+Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
+Reviewed-by: Jiri Olsa <jolsa@kernel.org>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Jin Yao <yao.jin@linux.intel.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Thomas Richter <tmricht@linux.vnet.ibm.com>
+Cc: yuzhoujian@didichuxing.com
+Fixes: 0aa802a79469 ("perf stat: Get rid of extra clock display function")
+Link: http://lkml.kernel.org/r/20181116042843.24067-1-ravi.bangoria@linux.ibm.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Cc: Tommi Rantala <tommi.t.rantala@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ tools/perf/util/stat-shadow.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+--- a/tools/perf/util/stat-shadow.c
++++ b/tools/perf/util/stat-shadow.c
+@@ -209,11 +209,12 @@ void perf_stat__update_shadow_stats(stru
+ int cpu, struct runtime_stat *st)
+ {
+ int ctx = evsel_context(counter);
++ u64 count_ns = count;
+
+ count *= counter->scale;
+
+ if (perf_evsel__is_clock(counter))
+- update_runtime_stat(st, STAT_NSECS, 0, cpu, count);
++ update_runtime_stat(st, STAT_NSECS, 0, cpu, count_ns);
+ else if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES))
+ update_runtime_stat(st, STAT_CYCLES, ctx, cpu, count);
+ else if (perf_stat_evsel__is(counter, CYCLES_IN_TX))
--- /dev/null
+From eb08d006054e7e374592068919e32579988602d4 Mon Sep 17 00:00:00 2001
+From: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
+Date: Thu, 15 Nov 2018 15:25:32 +0530
+Subject: perf stat: Use perf_evsel__is_clocki() for clock events
+
+From: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
+
+commit eb08d006054e7e374592068919e32579988602d4 upstream.
+
+We already have function to check if a given event is either
+SW_CPU_CLOCK or SW_TASK_CLOCK. Utilize it.
+
+Signed-off-by: Ravi Bangoria <ravi.bangoria@linux.ibm.com>
+Acked-by: Jiri Olsa <jolsa@kernel.org>
+Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
+Cc: Anton Blanchard <anton@samba.org>
+Cc: Jin Yao <yao.jin@linux.intel.com>
+Cc: Namhyung Kim <namhyung@kernel.org>
+Cc: Thomas Richter <tmricht@linux.vnet.ibm.com>
+Cc: yuzhoujian@didichuxing.com
+Link: http://lkml.kernel.org/r/20181115095533.16930-1-ravi.bangoria@linux.ibm.com
+Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
+Cc: Tommi Rantala <tommi.t.rantala@nokia.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ tools/perf/util/stat-shadow.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/tools/perf/util/stat-shadow.c
++++ b/tools/perf/util/stat-shadow.c
+@@ -212,8 +212,7 @@ void perf_stat__update_shadow_stats(stru
+
+ count *= counter->scale;
+
+- if (perf_evsel__match(counter, SOFTWARE, SW_TASK_CLOCK) ||
+- perf_evsel__match(counter, SOFTWARE, SW_CPU_CLOCK))
++ if (perf_evsel__is_clock(counter))
+ update_runtime_stat(st, STAT_NSECS, 0, cpu, count);
+ else if (perf_evsel__match(counter, HARDWARE, HW_CPU_CYCLES))
+ update_runtime_stat(st, STAT_CYCLES, ctx, cpu, count);