Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1303202 > unrolled thread
| Started by | Namhyung Kim <namhyung@kernel.org> |
|---|---|
| First post | 2016-01-07 01:20 +0100 |
| Last post | 2016-01-07 01:20 +0100 |
| Articles | 5 — 3 participants |
Back to article view | Back to linux.kernel
[PATCH v4 1/5] perf tools: Fix sorting of dynamic sort keys Namhyung Kim <namhyung@kernel.org> - 2016-01-07 01:20 +0100
[PATCH v4 5/5] perf evlist: Add --trace-fields option to show trace fields Namhyung Kim <namhyung@kernel.org> - 2016-01-07 01:20 +0100
Re: [PATCH v4 5/5] perf evlist: Add --trace-fields option to show trace fields Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-01-08 18:30 +0100
[tip:perf/core] perf evlist: Add --trace-fields option to show trace fields tip-bot for Namhyung Kim <tipbot@zytor.com> - 2016-01-09 17:50 +0100
[PATCH v4 3/5] perf tools: Fix dynamic sort keys to sort properly Namhyung Kim <namhyung@kernel.org> - 2016-01-07 01:20 +0100
| From | Namhyung Kim <namhyung@kernel.org> |
|---|---|
| Date | 2016-01-07 01:20 +0100 |
| Subject | [PATCH v4 1/5] perf tools: Fix sorting of dynamic sort keys |
| Message-ID | <qO6t4-5O-9@gated-at.bofh.it> |
Currently it sorts entries in reverse (alphabetic) order, fix it.
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
This patch can be folded into the original patch c7c2a5e40f17
("perf tools: Add dynamic sort key for tracepoint events")
tools/perf/util/sort.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index 04e2a5cb19e3..425097d2a1cd 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -1795,7 +1795,7 @@ static int64_t __sort__hde_cmp(struct perf_hpp_fmt *fmt,
update_dynamic_len(hde, b);
}
- return memcmp(a->raw_data + offset, b->raw_data + offset, size);
+ return memcmp(b->raw_data + offset, a->raw_data + offset, size);
}
bool perf_hpp__is_dynamic_entry(struct perf_hpp_fmt *fmt)
--
2.6.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [next] | [standalone]
| From | Namhyung Kim <namhyung@kernel.org> |
|---|---|
| Date | 2016-01-07 01:20 +0100 |
| Subject | [PATCH v4 5/5] perf evlist: Add --trace-fields option to show trace fields |
| Message-ID | <qO6t5-5O-25@gated-at.bofh.it> |
| In reply to | #1303202 |
To use dynamic sort keys, it might be good to add an option to see the
list of field names.
$ perf evlist -i perf.data.sched
sched:sched_switch
sched:sched_stat_wait
sched:sched_stat_sleep
sched:sched_stat_iowait
sched:sched_stat_runtime
sched:sched_process_fork
sched:sched_wakeup
sched:sched_wakeup_new
sched:sched_migrate_task
# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events
$ perf evlist -i perf.data.sched --trace-fields
sched:sched_switch: trace_fields=prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
sched:sched_stat_wait: trace_fields=comm,pid,delay
sched:sched_stat_sleep: trace_fields=comm,pid,delay
sched:sched_stat_iowait: trace_fields=comm,pid,delay
sched:sched_stat_runtime: trace_fields=comm,pid,runtime,vruntime
sched:sched_process_fork: trace_fields=parent_comm,parent_pid,child_comm,child_pid
sched:sched_wakeup: trace_fields=comm,pid,prio,success,target_cpu
sched:sched_wakeup_new: trace_fields=comm,pid,prio,success,target_cpu
sched:sched_migrate_task: trace_fields=comm,pid,prio,orig_cpu,dest_cpu
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/Documentation/perf-evlist.txt | 3 +++
tools/perf/builtin-evlist.c | 11 ++++++++++-
tools/perf/util/evsel.c | 23 +++++++++++++++++++++++
tools/perf/util/evsel.h | 1 +
4 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
index 1ceb3700ffbb..6f7200fb85cf 100644
--- a/tools/perf/Documentation/perf-evlist.txt
+++ b/tools/perf/Documentation/perf-evlist.txt
@@ -32,6 +32,9 @@ OPTIONS
--group::
Show event group information.
+--trace-fields::
+ Show tracepoint field names.
+
SEE ALSO
--------
linkperf:perf-record[1], linkperf:perf-list[1],
diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
index 08a7d36a2cf8..8a31f511e1a0 100644
--- a/tools/perf/builtin-evlist.c
+++ b/tools/perf/builtin-evlist.c
@@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
.mode = PERF_DATA_MODE_READ,
.force = details->force,
};
+ bool has_tracepoint = false;
session = perf_session__new(&file, 0, NULL);
if (session == NULL)
return -1;
- evlist__for_each(session->evlist, pos)
+ evlist__for_each(session->evlist, pos) {
perf_evsel__fprintf(pos, details, stdout);
+ if (pos->attr.type == PERF_TYPE_TRACEPOINT)
+ has_tracepoint = true;
+ }
+
+ if (has_tracepoint && !details->trace_fields)
+ printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
+
perf_session__delete(session);
return 0;
}
@@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
OPT_BOOLEAN('g', "group", &details.event_group,
"Show event group information"),
OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
+ OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
OPT_END()
};
const char * const evlist_usage[] = {
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 544e4400de13..b7822c98fcca 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
term, (u64)evsel->attr.sample_freq);
}
+
+ if (details->trace_fields) {
+ struct format_field *field;
+
+ if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
+ printed += comma_fprintf(fp, &first, " (not a tracepoint)");
+ goto out;
+ }
+
+ field = evsel->tp_format->format.fields;
+ if (field == NULL) {
+ printed += comma_fprintf(fp, &first, " (no trace field)");
+ goto out;
+ }
+
+ printed += comma_fprintf(fp, &first, " trace_fields=%s", field->name);
+
+ field = field->next;
+ while (field) {
+ printed += comma_fprintf(fp, &first, "%s", field->name);
+ field = field->next;
+ }
+ }
out:
fputc('\n', fp);
return ++printed;
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 5ded1fc0341e..8e75434bd01c 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -369,6 +369,7 @@ struct perf_attr_details {
bool verbose;
bool event_group;
bool force;
+ bool trace_fields;
};
int perf_evsel__fprintf(struct perf_evsel *evsel,
--
2.6.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [next] | [standalone]
| From | Arnaldo Carvalho de Melo <acme@kernel.org> |
|---|---|
| Date | 2016-01-08 18:30 +0100 |
| Subject | Re: [PATCH v4 5/5] perf evlist: Add --trace-fields option to show trace fields |
| Message-ID | <qOJ1p-1u1-23@gated-at.bofh.it> |
| In reply to | #1303206 |
Em Thu, Jan 07, 2016 at 09:12:29AM +0900, Namhyung Kim escreveu:
> To use dynamic sort keys, it might be good to add an option to see the
> list of field names.
>
> $ perf evlist -i perf.data.sched
> sched:sched_switch
> sched:sched_stat_wait
> sched:sched_stat_sleep
> sched:sched_stat_iowait
> sched:sched_stat_runtime
> sched:sched_process_fork
> sched:sched_wakeup
> sched:sched_wakeup_new
> sched:sched_migrate_task
> # Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events
>
> $ perf evlist -i perf.data.sched --trace-fields
> sched:sched_switch: trace_fields=prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
> sched:sched_stat_wait: trace_fields=comm,pid,delay
> sched:sched_stat_sleep: trace_fields=comm,pid,delay
> sched:sched_stat_iowait: trace_fields=comm,pid,delay
> sched:sched_stat_runtime: trace_fields=comm,pid,runtime,vruntime
> sched:sched_process_fork: trace_fields=parent_comm,parent_pid,child_comm,child_pid
> sched:sched_wakeup: trace_fields=comm,pid,prio,success,target_cpu
> sched:sched_wakeup_new: trace_fields=comm,pid,prio,success,target_cpu
> sched:sched_migrate_task: trace_fields=comm,pid,prio,orig_cpu,dest_cpu
So I changed that = to a ': ' so that, in verbose mode, it all gets
consistent:
[root@zoo ~]# perf evlist -v --trace-fields
sched:sched_switch: type: 2, size: 112, config: 0x10b, { sample_period, sample_freq }: 1, sample_type: IP|TID|TIME|CPU|PERIOD|RAW, disabled: 1, inherit: 1, mmap: 1, comm: 1, task: 1, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1, trace_fields: prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
[root@zoo ~]#
Applied,
- Arnaldo
> Signed-off-by: Namhyung Kim <namhyung@kernel.org>
> ---
> tools/perf/Documentation/perf-evlist.txt | 3 +++
> tools/perf/builtin-evlist.c | 11 ++++++++++-
> tools/perf/util/evsel.c | 23 +++++++++++++++++++++++
> tools/perf/util/evsel.h | 1 +
> 4 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
> index 1ceb3700ffbb..6f7200fb85cf 100644
> --- a/tools/perf/Documentation/perf-evlist.txt
> +++ b/tools/perf/Documentation/perf-evlist.txt
> @@ -32,6 +32,9 @@ OPTIONS
> --group::
> Show event group information.
>
> +--trace-fields::
> + Show tracepoint field names.
> +
> SEE ALSO
> --------
> linkperf:perf-record[1], linkperf:perf-list[1],
> diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
> index 08a7d36a2cf8..8a31f511e1a0 100644
> --- a/tools/perf/builtin-evlist.c
> +++ b/tools/perf/builtin-evlist.c
> @@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
> .mode = PERF_DATA_MODE_READ,
> .force = details->force,
> };
> + bool has_tracepoint = false;
>
> session = perf_session__new(&file, 0, NULL);
> if (session == NULL)
> return -1;
>
> - evlist__for_each(session->evlist, pos)
> + evlist__for_each(session->evlist, pos) {
> perf_evsel__fprintf(pos, details, stdout);
>
> + if (pos->attr.type == PERF_TYPE_TRACEPOINT)
> + has_tracepoint = true;
> + }
> +
> + if (has_tracepoint && !details->trace_fields)
> + printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
> +
> perf_session__delete(session);
> return 0;
> }
> @@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
> OPT_BOOLEAN('g', "group", &details.event_group,
> "Show event group information"),
> OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
> + OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
> OPT_END()
> };
> const char * const evlist_usage[] = {
> diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
> index 544e4400de13..b7822c98fcca 100644
> --- a/tools/perf/util/evsel.c
> +++ b/tools/perf/util/evsel.c
> @@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
> printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
> term, (u64)evsel->attr.sample_freq);
> }
> +
> + if (details->trace_fields) {
> + struct format_field *field;
> +
> + if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
> + printed += comma_fprintf(fp, &first, " (not a tracepoint)");
> + goto out;
> + }
> +
> + field = evsel->tp_format->format.fields;
> + if (field == NULL) {
> + printed += comma_fprintf(fp, &first, " (no trace field)");
> + goto out;
> + }
> +
> + printed += comma_fprintf(fp, &first, " trace_fields=%s", field->name);
> +
> + field = field->next;
> + while (field) {
> + printed += comma_fprintf(fp, &first, "%s", field->name);
> + field = field->next;
> + }
> + }
> out:
> fputc('\n', fp);
> return ++printed;
> diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
> index 5ded1fc0341e..8e75434bd01c 100644
> --- a/tools/perf/util/evsel.h
> +++ b/tools/perf/util/evsel.h
> @@ -369,6 +369,7 @@ struct perf_attr_details {
> bool verbose;
> bool event_group;
> bool force;
> + bool trace_fields;
> };
>
> int perf_evsel__fprintf(struct perf_evsel *evsel,
> --
> 2.6.4
[toc] | [prev] | [next] | [standalone]
| From | tip-bot for Namhyung Kim <tipbot@zytor.com> |
|---|---|
| Date | 2016-01-09 17:50 +0100 |
| Subject | [tip:perf/core] perf evlist: Add --trace-fields option to show trace fields |
| Message-ID | <qP4Se-8c3-7@gated-at.bofh.it> |
| In reply to | #1303206 |
Commit-ID: 775d8a1b0d75211cc6123915c6b5b688f2002478
Gitweb: http://git.kernel.org/tip/775d8a1b0d75211cc6123915c6b5b688f2002478
Author: Namhyung Kim <namhyung@kernel.org>
AuthorDate: Thu, 7 Jan 2016 09:12:29 +0900
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Fri, 8 Jan 2016 14:23:02 -0300
perf evlist: Add --trace-fields option to show trace fields
To use dynamic sort keys, it might be good to add an option to see the
list of field names.
$ perf evlist -i perf.data.sched
sched:sched_switch
sched:sched_stat_wait
sched:sched_stat_sleep
sched:sched_stat_iowait
sched:sched_stat_runtime
sched:sched_process_fork
sched:sched_wakeup
sched:sched_wakeup_new
sched:sched_migrate_task
# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events
$ perf evlist -i perf.data.sched --trace-fields
sched:sched_switch: trace_fields: prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
sched:sched_stat_wait: trace_fields: comm,pid,delay
sched:sched_stat_sleep: trace_fields: comm,pid,delay
sched:sched_stat_iowait: trace_fields: comm,pid,delay
sched:sched_stat_runtime: trace_fields: comm,pid,runtime,vruntime
sched:sched_process_fork: trace_fields: parent_comm,parent_pid,child_comm,child_pid
sched:sched_wakeup: trace_fields: comm,pid,prio,success,target_cpu
sched:sched_wakeup_new: trace_fields: comm,pid,prio,success,target_cpu
sched:sched_migrate_task: trace_fields: comm,pid,prio,orig_cpu,dest_cpu
Committer notes:
For another file, in verbose mode:
# perf evlist -v --trace-fields
sched:sched_switch: type: 2, size: 112, config: 0x10b, { sample_period, sample_freq }: 1, sample_type: IP|TID|TIME|CPU|PERIOD|RAW, disabled: 1, inherit: 1, mmap: 1, comm: 1, task: 1, sample_id_all: 1, exclude_guest: 1, mmap2: 1, comm_exec: 1, trace_fields: prev_comm,prev_pid,prev_prio,prev_state,next_comm,next_pid,next_prio
#
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
Cc: Andi Kleen <andi@firstfloor.org>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Wang Nan <wangnan0@huawei.com>
Link: http://lkml.kernel.org/r/1452125549-1511-5-git-send-email-namhyung@kernel.org
[ Replaced 'trace_fields=' with 'trace_fields: ' to make the output consistent in -v mode ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/Documentation/perf-evlist.txt | 3 +++
tools/perf/builtin-evlist.c | 11 ++++++++++-
tools/perf/util/evsel.c | 23 +++++++++++++++++++++++
tools/perf/util/evsel.h | 1 +
4 files changed, 37 insertions(+), 1 deletion(-)
diff --git a/tools/perf/Documentation/perf-evlist.txt b/tools/perf/Documentation/perf-evlist.txt
index 1ceb370..6f7200f 100644
--- a/tools/perf/Documentation/perf-evlist.txt
+++ b/tools/perf/Documentation/perf-evlist.txt
@@ -32,6 +32,9 @@ OPTIONS
--group::
Show event group information.
+--trace-fields::
+ Show tracepoint field names.
+
SEE ALSO
--------
linkperf:perf-record[1], linkperf:perf-list[1],
diff --git a/tools/perf/builtin-evlist.c b/tools/perf/builtin-evlist.c
index 08a7d36..8a31f51 100644
--- a/tools/perf/builtin-evlist.c
+++ b/tools/perf/builtin-evlist.c
@@ -26,14 +26,22 @@ static int __cmd_evlist(const char *file_name, struct perf_attr_details *details
.mode = PERF_DATA_MODE_READ,
.force = details->force,
};
+ bool has_tracepoint = false;
session = perf_session__new(&file, 0, NULL);
if (session == NULL)
return -1;
- evlist__for_each(session->evlist, pos)
+ evlist__for_each(session->evlist, pos) {
perf_evsel__fprintf(pos, details, stdout);
+ if (pos->attr.type == PERF_TYPE_TRACEPOINT)
+ has_tracepoint = true;
+ }
+
+ if (has_tracepoint && !details->trace_fields)
+ printf("# Tip: use 'perf evlist --trace-fields' to show fields for tracepoint events\n");
+
perf_session__delete(session);
return 0;
}
@@ -49,6 +57,7 @@ int cmd_evlist(int argc, const char **argv, const char *prefix __maybe_unused)
OPT_BOOLEAN('g', "group", &details.event_group,
"Show event group information"),
OPT_BOOLEAN('f', "force", &details.force, "don't complain, do it"),
+ OPT_BOOLEAN(0, "trace-fields", &details.trace_fields, "Show tracepoint fields"),
OPT_END()
};
const char * const evlist_usage[] = {
diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c
index 544e440..cdbaf9b 100644
--- a/tools/perf/util/evsel.c
+++ b/tools/perf/util/evsel.c
@@ -2298,6 +2298,29 @@ int perf_evsel__fprintf(struct perf_evsel *evsel,
printed += comma_fprintf(fp, &first, " %s=%" PRIu64,
term, (u64)evsel->attr.sample_freq);
}
+
+ if (details->trace_fields) {
+ struct format_field *field;
+
+ if (evsel->attr.type != PERF_TYPE_TRACEPOINT) {
+ printed += comma_fprintf(fp, &first, " (not a tracepoint)");
+ goto out;
+ }
+
+ field = evsel->tp_format->format.fields;
+ if (field == NULL) {
+ printed += comma_fprintf(fp, &first, " (no trace field)");
+ goto out;
+ }
+
+ printed += comma_fprintf(fp, &first, " trace_fields: %s", field->name);
+
+ field = field->next;
+ while (field) {
+ printed += comma_fprintf(fp, &first, "%s", field->name);
+ field = field->next;
+ }
+ }
out:
fputc('\n', fp);
return ++printed;
diff --git a/tools/perf/util/evsel.h b/tools/perf/util/evsel.h
index 5ded1fc..8e75434 100644
--- a/tools/perf/util/evsel.h
+++ b/tools/perf/util/evsel.h
@@ -369,6 +369,7 @@ struct perf_attr_details {
bool verbose;
bool event_group;
bool force;
+ bool trace_fields;
};
int perf_evsel__fprintf(struct perf_evsel *evsel,
[toc] | [prev] | [next] | [standalone]
| From | Namhyung Kim <namhyung@kernel.org> |
|---|---|
| Date | 2016-01-07 01:20 +0100 |
| Subject | [PATCH v4 3/5] perf tools: Fix dynamic sort keys to sort properly |
| Message-ID | <qO6t5-5O-27@gated-at.bofh.it> |
| In reply to | #1303202 |
Currently, the dynamic sort keys compares trace data using memcmp().
But for output sorting, it should check data size and compare by word.
Also it sorted strings in reverse order, fix it.
Before)
$ perf report -F overhead -s prev_pid,next_pid
...
# Overhead prev_pid next_pid
# ........ .......... ..........
#
0.39% 490 0
9.12% 225 0
0.04% 224 0
0.51% 731 189
0.08% 731 3
0.12% 731 0
4.82% 729 0
0.08% 1229 0
0.20% 715 0
4.78% 189 225
...
After)
$ perf report -F overhead -s prev_pid,next_pid
...
# Overhead prev_pid next_pid
# ........ .......... ..........
#
0.43% 0 7
0.04% 0 11
0.04% 0 12
0.08% 0 14
0.04% 0 17
0.08% 0 19
0.04% 0 22
0.04% 0 27
0.04% 0 37
0.04% 0 42
...
Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org>
Signed-off-by: Namhyung Kim <namhyung@kernel.org>
---
tools/perf/util/sort.c | 23 ++++++++++++++++++++++-
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/sort.c b/tools/perf/util/sort.c
index e8a5cdee3f0d..4d05b13aeac8 100644
--- a/tools/perf/util/sort.c
+++ b/tools/perf/util/sort.c
@@ -1804,6 +1804,9 @@ static int64_t __sort__hde_sort(struct perf_hpp_fmt *fmt,
struct hpp_dynamic_entry *hde;
struct format_field *field;
unsigned offset, size;
+ int64_t *a64, *b64;
+ int32_t *a32, *b32;
+ int16_t *a16, *b16;
hde = container_of(fmt, struct hpp_dynamic_entry, hpp);
@@ -1819,7 +1822,25 @@ static int64_t __sort__hde_sort(struct perf_hpp_fmt *fmt,
size = field->size;
}
- return memcmp(b->raw_data + offset, a->raw_data + offset, size);
+ if (field->flags & FIELD_IS_STRING)
+ return strcmp(b->raw_data + offset, a->raw_data + offset);
+
+ switch (size) {
+ case 8:
+ a64 = a->raw_data + offset;
+ b64 = b->raw_data + offset;
+ return *b64 - *a64;
+ case 4:
+ a32 = a->raw_data + offset;
+ b32 = b->raw_data + offset;
+ return *b32 - *a32;
+ case 2:
+ a16 = a->raw_data + offset;
+ b16 = b->raw_data + offset;
+ return *b16 - *a16;
+ default:
+ return memcmp(b->raw_data + offset, a->raw_data + offset, size);
+ }
}
bool perf_hpp__is_dynamic_entry(struct perf_hpp_fmt *fmt)
--
2.6.4
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web