diff options
author | Jiri Olsa <jolsa@kernel.org> | 2017-09-08 14:05:08 +0200 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@redhat.com> | 2017-09-12 12:34:54 -0300 |
commit | a82bfd041d0ec41861a7adda4c078993f2f9c452 (patch) | |
tree | 6c8718bd43cc1b845bcef3d92a2021980f6c55ff | |
parent | 4d286c89e412fc2eaa1b8988481d2f32b5e3826f (diff) | |
download | linux-a82bfd041d0ec41861a7adda4c078993f2f9c452.tar.bz2 |
perf ui progress: Fix progress update
We currently update the 'next' variable only with a single step value.
But it's possible the 'adv' update is bigger than single 'step' value.
This would leave 'next' value under counted and force unnecessary
ui_progress__ops->update calls.
Calculate the amount of steps we need for 'adv' update and increase the
'next' with that amounts of steps.
Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/r/20170908120510.22515-3-jolsa@kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
-rw-r--r-- | tools/perf/ui/progress.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/tools/perf/ui/progress.c b/tools/perf/ui/progress.c index a9c15804b1f6..ae91c8148edf 100644 --- a/tools/perf/ui/progress.c +++ b/tools/perf/ui/progress.c @@ -1,3 +1,4 @@ +#include <linux/kernel.h> #include "../cache.h" #include "progress.h" @@ -14,10 +15,14 @@ struct ui_progress_ops *ui_progress__ops = &null_progress__ops; void ui_progress__update(struct ui_progress *p, u64 adv) { + u64 last = p->curr; + p->curr += adv; if (p->curr >= p->next) { - p->next += p->step; + u64 nr = DIV_ROUND_UP(p->curr - last, p->step); + + p->next += nr * p->step; ui_progress__ops->update(p); } } |