| From a1c9f97f0b64e6337d9cfcc08c134450934fdd90 Mon Sep 17 00:00:00 2001 |
| From: Namhyung Kim <namhyung@kernel.org> |
| Date: Wed, 18 Jan 2017 14:14:57 +0900 |
| Subject: [PATCH] perf diff: Fix -o/--order option behavior (again) |
| |
| commit a1c9f97f0b64e6337d9cfcc08c134450934fdd90 upstream. |
| |
| Commit 21e6d8428664 ("perf diff: Use perf_hpp__register_sort_field |
| interface") changed list_add() to perf_hpp__register_sort_field(). |
| |
| This resulted in a behavior change since the field was added to the tail |
| instead of the head. So the -o option is mostly ignored due to its |
| order in the list. |
| |
| This patch fixes it by adding perf_hpp__prepend_sort_field(). |
| |
| Signed-off-by: Namhyung Kim <namhyung@kernel.org> |
| Acked-by: Jiri Olsa <jolsa@kernel.org> |
| Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> |
| Fixes: 21e6d8428664 ("perf diff: Use perf_hpp__register_sort_field interface") |
| Link: http://lkml.kernel.org/r/20170118051457.30946-2-namhyung@kernel.org |
| Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> |
| |
| diff --git a/tools/perf/builtin-diff.c b/tools/perf/builtin-diff.c |
| index 9ff0db4e2d0c..933aeec46f4a 100644 |
| --- a/tools/perf/builtin-diff.c |
| +++ b/tools/perf/builtin-diff.c |
| @@ -1199,7 +1199,7 @@ static int ui_init(void) |
| BUG_ON(1); |
| } |
| |
| - perf_hpp__register_sort_field(fmt); |
| + perf_hpp__prepend_sort_field(fmt); |
| return 0; |
| } |
| |
| diff --git a/tools/perf/ui/hist.c b/tools/perf/ui/hist.c |
| index 4ec79b2f9416..18cfcdc90356 100644 |
| --- a/tools/perf/ui/hist.c |
| +++ b/tools/perf/ui/hist.c |
| @@ -521,6 +521,12 @@ void perf_hpp_list__register_sort_field(struct perf_hpp_list *list, |
| list_add_tail(&format->sort_list, &list->sorts); |
| } |
| |
| +void perf_hpp_list__prepend_sort_field(struct perf_hpp_list *list, |
| + struct perf_hpp_fmt *format) |
| +{ |
| + list_add(&format->sort_list, &list->sorts); |
| +} |
| + |
| void perf_hpp__column_unregister(struct perf_hpp_fmt *format) |
| { |
| list_del(&format->list); |
| diff --git a/tools/perf/util/hist.h b/tools/perf/util/hist.h |
| index d4b6514eeef5..28c216e3d5b7 100644 |
| --- a/tools/perf/util/hist.h |
| +++ b/tools/perf/util/hist.h |
| @@ -283,6 +283,8 @@ void perf_hpp_list__column_register(struct perf_hpp_list *list, |
| struct perf_hpp_fmt *format); |
| void perf_hpp_list__register_sort_field(struct perf_hpp_list *list, |
| struct perf_hpp_fmt *format); |
| +void perf_hpp_list__prepend_sort_field(struct perf_hpp_list *list, |
| + struct perf_hpp_fmt *format); |
| |
| static inline void perf_hpp__column_register(struct perf_hpp_fmt *format) |
| { |
| @@ -294,6 +296,11 @@ static inline void perf_hpp__register_sort_field(struct perf_hpp_fmt *format) |
| perf_hpp_list__register_sort_field(&perf_hpp_list, format); |
| } |
| |
| +static inline void perf_hpp__prepend_sort_field(struct perf_hpp_fmt *format) |
| +{ |
| + perf_hpp_list__prepend_sort_field(&perf_hpp_list, format); |
| +} |
| + |
| #define perf_hpp_list__for_each_format(_list, format) \ |
| list_for_each_entry(format, &(_list)->fields, list) |
| |
| -- |
| 2.12.0 |
| |