Joakim reported wrong duration_time value for interval bigger
than 4000 [1].

The problem is in the interval value we pass to update_stats
function, which is typed as 'unsigned int' and overflows when
we get over 2^32 (happens between intervals 4000 and 5000).

Retyping the passed value to unsigned long long.

[1] https://www.spinics.net/lists/linux-perf-users/msg11777.html

Reported-by: Joakim Zhang <[email protected]>
Signed-off-by: Jiri Olsa <[email protected]>
---
 tools/perf/builtin-stat.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index e0c1ad23c768..4deb2d46a343 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -367,7 +367,7 @@ static void process_interval(void)
        }
 
        init_stats(&walltime_nsecs_stats);
-       update_stats(&walltime_nsecs_stats, stat_config.interval * 1000000);
+       update_stats(&walltime_nsecs_stats, stat_config.interval * 1000000ULL);
        print_counters(&rs, 0, NULL);
 }
 
-- 
2.25.4

Reply via email to