* [PATCH 0/2] perf: fix events overflow in top command
@ 2011-03-07 20:13 Jiri Olsa
2011-03-07 20:13 ` [PATCH 1/2] perf,top: " Jiri Olsa
2011-03-07 20:13 ` [PATCH 2/2] perf,top: dont let events to eat up whole header line Jiri Olsa
0 siblings, 2 replies; 9+ messages in thread
From: Jiri Olsa @ 2011-03-07 20:13 UTC (permalink / raw)
To: a.p.zijlstra, paulus, mingo; +Cc: linux-kernel, phan
hi,
there's a way to crash perf top command by specifying multiple
events. Attached is the fix and change to eliminate the events
output in case many events are specified.
attached patches:
1/2 - perf,top: fix events overflow in top command
2/2 - perf,top: dont let events to eat up whole header line
wbr,
jirka
---
tools/perf/util/top.c | 48 ++++++++++++++++++++++++++++++++++--------------
1 files changed, 34 insertions(+), 14 deletions(-)
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH 1/2] perf,top: fix events overflow in top command
2011-03-07 20:13 [PATCH 0/2] perf: fix events overflow in top command Jiri Olsa
@ 2011-03-07 20:13 ` Jiri Olsa
2011-03-09 13:59 ` Arnaldo Carvalho de Melo
2011-03-11 9:46 ` [tip:perf/core] perf top: Fix " tip-bot for Jiri Olsa
2011-03-07 20:13 ` [PATCH 2/2] perf,top: dont let events to eat up whole header line Jiri Olsa
1 sibling, 2 replies; 9+ messages in thread
From: Jiri Olsa @ 2011-03-07 20:13 UTC (permalink / raw)
To: a.p.zijlstra, paulus, mingo; +Cc: linux-kernel, phan, Jiri Olsa
The snprintf function returns number of printed characters even
if it cross the size parameter. So passing enough events via '-e'
parameter will cause segmentation fault.
It's reproduced by following command:
perf top -e `perf list | grep Tracepoint | awk -F'[' '\
{gsub(/[[:space:]]+/,"",$1);array[FNR]=$1}END{outputs=array[1];\
for (i=2;i<=FNR;i++){ outputs=outputs "," array[i];};print outputs}'`
Attached patch is adding SNPRINTF macro that provides the
overflow check and returns actuall number of printed characters.
wbr,
jirka
Reported-by: Han Pingtian <phan@redhat.com>
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
---
tools/perf/util/top.c | 30 ++++++++++++++++++------------
1 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/tools/perf/util/top.c b/tools/perf/util/top.c
index 70a9c13..4f869da 100644
--- a/tools/perf/util/top.c
+++ b/tools/perf/util/top.c
@@ -61,6 +61,12 @@ static void rb_insert_active_sym(struct rb_root *tree, struct sym_entry *se)
rb_insert_color(&se->rb_node, tree);
}
+#define SNPRINTF(buf, size, fmt, args...) \
+({ \
+ size_t r = snprintf(buf, size, fmt, ## args); \
+ r > size ? size : r; \
+})
+
size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
{
struct perf_evsel *counter;
@@ -70,7 +76,7 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
size_t ret = 0;
if (!perf_guest) {
- ret = snprintf(bf, size,
+ ret = SNPRINTF(bf, size,
" PerfTop:%8.0f irqs/sec kernel:%4.1f%%"
" exact: %4.1f%% [", samples_per_sec,
100.0 - (100.0 * ((samples_per_sec - ksamples_per_sec) /
@@ -81,7 +87,7 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
float guest_kernel_samples_per_sec = top->guest_kernel_samples / top->delay_secs;
float guest_us_samples_per_sec = top->guest_us_samples / top->delay_secs;
- ret = snprintf(bf, size,
+ ret = SNPRINTF(bf, size,
" PerfTop:%8.0f irqs/sec kernel:%4.1f%% us:%4.1f%%"
" guest kernel:%4.1f%% guest us:%4.1f%%"
" exact: %4.1f%% [", samples_per_sec,
@@ -101,38 +107,38 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
if (top->evlist->nr_entries == 1 || !top->display_weighted) {
struct perf_evsel *first;
first = list_entry(top->evlist->entries.next, struct perf_evsel, node);
- ret += snprintf(bf + ret, size - ret, "%" PRIu64 "%s ",
+ ret += SNPRINTF(bf + ret, size - ret, "%" PRIu64 "%s ",
(uint64_t)first->attr.sample_period,
top->freq ? "Hz" : "");
}
if (!top->display_weighted) {
- ret += snprintf(bf + ret, size - ret, "%s",
+ ret += SNPRINTF(bf + ret, size - ret, "%s",
event_name(top->sym_evsel));
} else list_for_each_entry(counter, &top->evlist->entries, node) {
- ret += snprintf(bf + ret, size - ret, "%s%s",
+ ret += SNPRINTF(bf + ret, size - ret, "%s%s",
counter->idx ? "/" : "", event_name(counter));
}
- ret += snprintf(bf + ret, size - ret, "], ");
+ ret += SNPRINTF(bf + ret, size - ret, "], ");
if (top->target_pid != -1)
- ret += snprintf(bf + ret, size - ret, " (target_pid: %d",
+ ret += SNPRINTF(bf + ret, size - ret, " (target_pid: %d",
top->target_pid);
else if (top->target_tid != -1)
- ret += snprintf(bf + ret, size - ret, " (target_tid: %d",
+ ret += SNPRINTF(bf + ret, size - ret, " (target_tid: %d",
top->target_tid);
else
- ret += snprintf(bf + ret, size - ret, " (all");
+ ret += SNPRINTF(bf + ret, size - ret, " (all");
if (top->cpu_list)
- ret += snprintf(bf + ret, size - ret, ", CPU%s: %s)",
+ ret += SNPRINTF(bf + ret, size - ret, ", CPU%s: %s)",
top->evlist->cpus->nr > 1 ? "s" : "", top->cpu_list);
else {
if (top->target_tid != -1)
- ret += snprintf(bf + ret, size - ret, ")");
+ ret += SNPRINTF(bf + ret, size - ret, ")");
else
- ret += snprintf(bf + ret, size - ret, ", %d CPU%s)",
+ ret += SNPRINTF(bf + ret, size - ret, ", %d CPU%s)",
top->evlist->cpus->nr,
top->evlist->cpus->nr > 1 ? "s" : "");
}
--
1.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH 2/2] perf,top: dont let events to eat up whole header line
2011-03-07 20:13 [PATCH 0/2] perf: fix events overflow in top command Jiri Olsa
2011-03-07 20:13 ` [PATCH 1/2] perf,top: " Jiri Olsa
@ 2011-03-07 20:13 ` Jiri Olsa
2011-03-11 9:47 ` [tip:perf/core] perf top: Don't " tip-bot for Jiri Olsa
1 sibling, 1 reply; 9+ messages in thread
From: Jiri Olsa @ 2011-03-07 20:13 UTC (permalink / raw)
To: a.p.zijlstra, paulus, mingo; +Cc: linux-kernel, phan, Jiri Olsa
Passing multiple events might force out information about pid/tid/cpu.
Attached patch leaves 30 characters for this info at the expense of
the events' names.
wbr,
jirka
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
---
tools/perf/util/top.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/top.c b/tools/perf/util/top.c
index 4f869da..75cfe4d 100644
--- a/tools/perf/util/top.c
+++ b/tools/perf/util/top.c
@@ -115,9 +115,23 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
if (!top->display_weighted) {
ret += SNPRINTF(bf + ret, size - ret, "%s",
event_name(top->sym_evsel));
- } else list_for_each_entry(counter, &top->evlist->entries, node) {
- ret += SNPRINTF(bf + ret, size - ret, "%s%s",
- counter->idx ? "/" : "", event_name(counter));
+ } else {
+ /*
+ * Don't let events eat all the space. Leaving 30 bytes
+ * for the rest should be enough.
+ */
+ size_t last_pos = size - 30;
+
+ list_for_each_entry(counter, &top->evlist->entries, node) {
+ ret += SNPRINTF(bf + ret, size - ret, "%s%s",
+ counter->idx ? "/" : "",
+ event_name(counter));
+ if (ret > last_pos) {
+ sprintf(bf + last_pos - 3, "..");
+ ret = last_pos - 1;
+ break;
+ }
+ }
}
ret += SNPRINTF(bf + ret, size - ret, "], ");
--
1.7.4
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] perf,top: fix events overflow in top command
2011-03-07 20:13 ` [PATCH 1/2] perf,top: " Jiri Olsa
@ 2011-03-09 13:59 ` Arnaldo Carvalho de Melo
2011-03-09 14:06 ` Arnaldo Carvalho de Melo
2011-03-11 9:46 ` [tip:perf/core] perf top: Fix " tip-bot for Jiri Olsa
1 sibling, 1 reply; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2011-03-09 13:59 UTC (permalink / raw)
To: Jiri Olsa; +Cc: a.p.zijlstra, paulus, mingo, linux-kernel, phan
Em Mon, Mar 07, 2011 at 09:13:40PM +0100, Jiri Olsa escreveu:
> The snprintf function returns number of printed characters even
> if it cross the size parameter. So passing enough events via '-e'
> parameter will cause segmentation fault.
>
> It's reproduced by following command:
>
> perf top -e `perf list | grep Tracepoint | awk -F'[' '\
> {gsub(/[[:space:]]+/,"",$1);array[FNR]=$1}END{outputs=array[1];\
> for (i=2;i<=FNR;i++){ outputs=outputs "," array[i];};print outputs}'`
>
> Attached patch is adding SNPRINTF macro that provides the
> overflow check and returns actuall number of printed characters.
Good catch, applying to perf/urgent.
- Arnaldo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] perf,top: fix events overflow in top command
2011-03-09 13:59 ` Arnaldo Carvalho de Melo
@ 2011-03-09 14:06 ` Arnaldo Carvalho de Melo
2011-03-09 14:19 ` Jiri Olsa
0 siblings, 1 reply; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2011-03-09 14:06 UTC (permalink / raw)
To: Jiri Olsa; +Cc: a.p.zijlstra, paulus, mingo, linux-kernel, phan
Em Wed, Mar 09, 2011 at 10:59:25AM -0300, Arnaldo Carvalho de Melo escreveu:
> Em Mon, Mar 07, 2011 at 09:13:40PM +0100, Jiri Olsa escreveu:
> > The snprintf function returns number of printed characters even
> > if it cross the size parameter. So passing enough events via '-e'
> > parameter will cause segmentation fault.
> >
> > It's reproduced by following command:
> >
> > perf top -e `perf list | grep Tracepoint | awk -F'[' '\
> > {gsub(/[[:space:]]+/,"",$1);array[FNR]=$1}END{outputs=array[1];\
> > for (i=2;i<=FNR;i++){ outputs=outputs "," array[i];};print outputs}'`
> >
> > Attached patch is adding SNPRINTF macro that provides the
> > overflow check and returns actuall number of printed characters.
>
> Good catch, applying to perf/urgent.
Tried but it doesn't apply nor can I reproduce the overflow (albeit
granted the long line of events is annoying).
So I'm applying both patches to perf/core instead.
- Arnaldo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] perf,top: fix events overflow in top command
2011-03-09 14:06 ` Arnaldo Carvalho de Melo
@ 2011-03-09 14:19 ` Jiri Olsa
2011-03-09 14:25 ` Arnaldo Carvalho de Melo
0 siblings, 1 reply; 9+ messages in thread
From: Jiri Olsa @ 2011-03-09 14:19 UTC (permalink / raw)
To: Arnaldo Carvalho de Melo; +Cc: a.p.zijlstra, paulus, mingo, linux-kernel, phan
On Wed, Mar 09, 2011 at 11:06:10AM -0300, Arnaldo Carvalho de Melo wrote:
> Em Wed, Mar 09, 2011 at 10:59:25AM -0300, Arnaldo Carvalho de Melo escreveu:
> > Em Mon, Mar 07, 2011 at 09:13:40PM +0100, Jiri Olsa escreveu:
> > > The snprintf function returns number of printed characters even
> > > if it cross the size parameter. So passing enough events via '-e'
> > > parameter will cause segmentation fault.
> > >
> > > It's reproduced by following command:
> > >
> > > perf top -e `perf list | grep Tracepoint | awk -F'[' '\
> > > {gsub(/[[:space:]]+/,"",$1);array[FNR]=$1}END{outputs=array[1];\
> > > for (i=2;i<=FNR;i++){ outputs=outputs "," array[i];};print outputs}'`
> > >
> > > Attached patch is adding SNPRINTF macro that provides the
> > > overflow check and returns actuall number of printed characters.
> >
> > Good catch, applying to perf/urgent.
>
> Tried but it doesn't apply nor can I reproduce the overflow (albeit
> granted the long line of events is annoying).
patches were based on tip tree
hm, it crashes for me on tip tree,
but I haven't checked the perf/core tree..
not sure if it's any help, but while debugging I could see the sigsegv happened
when the pointer was far beyond the 160 chars buffer size,
maybe the buffer got bigger in the perf tree..
jirka
>
> So I'm applying both patches to perf/core instead.
>
> - Arnaldo
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH 1/2] perf,top: fix events overflow in top command
2011-03-09 14:19 ` Jiri Olsa
@ 2011-03-09 14:25 ` Arnaldo Carvalho de Melo
0 siblings, 0 replies; 9+ messages in thread
From: Arnaldo Carvalho de Melo @ 2011-03-09 14:25 UTC (permalink / raw)
To: Jiri Olsa; +Cc: a.p.zijlstra, paulus, mingo, linux-kernel, phan
Em Wed, Mar 09, 2011 at 03:19:10PM +0100, Jiri Olsa escreveu:
> On Wed, Mar 09, 2011 at 11:06:10AM -0300, Arnaldo Carvalho de Melo wrote:
> > Em Wed, Mar 09, 2011 at 10:59:25AM -0300, Arnaldo Carvalho de Melo escreveu:
> > > Good catch, applying to perf/urgent.
> >
> > Tried but it doesn't apply nor can I reproduce the overflow (albeit
> > granted the long line of events is annoying).
>
> patches were based on tip tree
>
> hm, it crashes for me on tip tree,
> but I haven't checked the perf/core tree..
>
> not sure if it's any help, but while debugging I could see the sigsegv happened
> when the pointer was far beyond the 160 chars buffer size,
> maybe the buffer got bigger in the perf tree..
Anyway, using tip/master you are using perf/core so the patch was made
against it, I already merged it, will be on my next pull request to
Ingo.
Thanks,
- Arnaldo
^ permalink raw reply [flat|nested] 9+ messages in thread
* [tip:perf/core] perf top: Fix events overflow in top command
2011-03-07 20:13 ` [PATCH 1/2] perf,top: " Jiri Olsa
2011-03-09 13:59 ` Arnaldo Carvalho de Melo
@ 2011-03-11 9:46 ` tip-bot for Jiri Olsa
1 sibling, 0 replies; 9+ messages in thread
From: tip-bot for Jiri Olsa @ 2011-03-11 9:46 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra, jolsa, phan,
tglx, mingo
Commit-ID: b9a46bba88001504235459c8410f17e6a7e38008
Gitweb: http://git.kernel.org/tip/b9a46bba88001504235459c8410f17e6a7e38008
Author: Jiri Olsa <jolsa@redhat.com>
AuthorDate: Mon, 7 Mar 2011 21:13:40 +0100
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 10 Mar 2011 10:54:13 -0300
perf top: Fix events overflow in top command
The snprintf function returns number of printed characters even if it
cross the size parameter. So passing enough events via '-e' parameter
will cause segmentation fault.
It's reproduced by following command:
perf top -e `perf list | grep Tracepoint | awk -F'[' '\
{gsub(/[[:space:]]+/,"",$1);array[FNR]=$1}END{outputs=array[1];\
for (i=2;i<=FNR;i++){ outputs=outputs "," array[i];};print outputs}'`
Attached patch is adding SNPRINTF macro that provides the overflow check
and returns actuall number of printed characters.
Reported-by: Han Pingtian <phan@redhat.com>
Cc: Han Pingtian <phan@redhat.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <1299528821-17521-2-git-send-email-jolsa@redhat.com>
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/top.c | 30 ++++++++++++++++++------------
1 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/tools/perf/util/top.c b/tools/perf/util/top.c
index 70a9c13..4f869da 100644
--- a/tools/perf/util/top.c
+++ b/tools/perf/util/top.c
@@ -61,6 +61,12 @@ static void rb_insert_active_sym(struct rb_root *tree, struct sym_entry *se)
rb_insert_color(&se->rb_node, tree);
}
+#define SNPRINTF(buf, size, fmt, args...) \
+({ \
+ size_t r = snprintf(buf, size, fmt, ## args); \
+ r > size ? size : r; \
+})
+
size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
{
struct perf_evsel *counter;
@@ -70,7 +76,7 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
size_t ret = 0;
if (!perf_guest) {
- ret = snprintf(bf, size,
+ ret = SNPRINTF(bf, size,
" PerfTop:%8.0f irqs/sec kernel:%4.1f%%"
" exact: %4.1f%% [", samples_per_sec,
100.0 - (100.0 * ((samples_per_sec - ksamples_per_sec) /
@@ -81,7 +87,7 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
float guest_kernel_samples_per_sec = top->guest_kernel_samples / top->delay_secs;
float guest_us_samples_per_sec = top->guest_us_samples / top->delay_secs;
- ret = snprintf(bf, size,
+ ret = SNPRINTF(bf, size,
" PerfTop:%8.0f irqs/sec kernel:%4.1f%% us:%4.1f%%"
" guest kernel:%4.1f%% guest us:%4.1f%%"
" exact: %4.1f%% [", samples_per_sec,
@@ -101,38 +107,38 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
if (top->evlist->nr_entries == 1 || !top->display_weighted) {
struct perf_evsel *first;
first = list_entry(top->evlist->entries.next, struct perf_evsel, node);
- ret += snprintf(bf + ret, size - ret, "%" PRIu64 "%s ",
+ ret += SNPRINTF(bf + ret, size - ret, "%" PRIu64 "%s ",
(uint64_t)first->attr.sample_period,
top->freq ? "Hz" : "");
}
if (!top->display_weighted) {
- ret += snprintf(bf + ret, size - ret, "%s",
+ ret += SNPRINTF(bf + ret, size - ret, "%s",
event_name(top->sym_evsel));
} else list_for_each_entry(counter, &top->evlist->entries, node) {
- ret += snprintf(bf + ret, size - ret, "%s%s",
+ ret += SNPRINTF(bf + ret, size - ret, "%s%s",
counter->idx ? "/" : "", event_name(counter));
}
- ret += snprintf(bf + ret, size - ret, "], ");
+ ret += SNPRINTF(bf + ret, size - ret, "], ");
if (top->target_pid != -1)
- ret += snprintf(bf + ret, size - ret, " (target_pid: %d",
+ ret += SNPRINTF(bf + ret, size - ret, " (target_pid: %d",
top->target_pid);
else if (top->target_tid != -1)
- ret += snprintf(bf + ret, size - ret, " (target_tid: %d",
+ ret += SNPRINTF(bf + ret, size - ret, " (target_tid: %d",
top->target_tid);
else
- ret += snprintf(bf + ret, size - ret, " (all");
+ ret += SNPRINTF(bf + ret, size - ret, " (all");
if (top->cpu_list)
- ret += snprintf(bf + ret, size - ret, ", CPU%s: %s)",
+ ret += SNPRINTF(bf + ret, size - ret, ", CPU%s: %s)",
top->evlist->cpus->nr > 1 ? "s" : "", top->cpu_list);
else {
if (top->target_tid != -1)
- ret += snprintf(bf + ret, size - ret, ")");
+ ret += SNPRINTF(bf + ret, size - ret, ")");
else
- ret += snprintf(bf + ret, size - ret, ", %d CPU%s)",
+ ret += SNPRINTF(bf + ret, size - ret, ", %d CPU%s)",
top->evlist->cpus->nr,
top->evlist->cpus->nr > 1 ? "s" : "");
}
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [tip:perf/core] perf top: Don't let events to eat up whole header line
2011-03-07 20:13 ` [PATCH 2/2] perf,top: dont let events to eat up whole header line Jiri Olsa
@ 2011-03-11 9:47 ` tip-bot for Jiri Olsa
0 siblings, 0 replies; 9+ messages in thread
From: tip-bot for Jiri Olsa @ 2011-03-11 9:47 UTC (permalink / raw)
To: linux-tip-commits
Cc: acme, linux-kernel, paulus, hpa, mingo, a.p.zijlstra, jolsa, phan,
tglx, mingo
Commit-ID: 6547250381eb315acff3d52b4872ad775359407c
Gitweb: http://git.kernel.org/tip/6547250381eb315acff3d52b4872ad775359407c
Author: Jiri Olsa <jolsa@redhat.com>
AuthorDate: Mon, 7 Mar 2011 21:13:41 +0100
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 10 Mar 2011 10:55:00 -0300
perf top: Don't let events to eat up whole header line
Passing multiple events might force out information about pid/tid/cpu.
Attached patch leaves 30 characters for this info at the expense of the
events' names.
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Cc: Han Pingtian <phan@redhat.com>
LKML-Reference: <1299528821-17521-3-git-send-email-jolsa@redhat.com>
Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/top.c | 20 +++++++++++++++++---
1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/tools/perf/util/top.c b/tools/perf/util/top.c
index 4f869da..75cfe4d 100644
--- a/tools/perf/util/top.c
+++ b/tools/perf/util/top.c
@@ -115,9 +115,23 @@ size_t perf_top__header_snprintf(struct perf_top *top, char *bf, size_t size)
if (!top->display_weighted) {
ret += SNPRINTF(bf + ret, size - ret, "%s",
event_name(top->sym_evsel));
- } else list_for_each_entry(counter, &top->evlist->entries, node) {
- ret += SNPRINTF(bf + ret, size - ret, "%s%s",
- counter->idx ? "/" : "", event_name(counter));
+ } else {
+ /*
+ * Don't let events eat all the space. Leaving 30 bytes
+ * for the rest should be enough.
+ */
+ size_t last_pos = size - 30;
+
+ list_for_each_entry(counter, &top->evlist->entries, node) {
+ ret += SNPRINTF(bf + ret, size - ret, "%s%s",
+ counter->idx ? "/" : "",
+ event_name(counter));
+ if (ret > last_pos) {
+ sprintf(bf + last_pos - 3, "..");
+ ret = last_pos - 1;
+ break;
+ }
+ }
}
ret += SNPRINTF(bf + ret, size - ret, "], ");
^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-03-11 9:47 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-07 20:13 [PATCH 0/2] perf: fix events overflow in top command Jiri Olsa
2011-03-07 20:13 ` [PATCH 1/2] perf,top: " Jiri Olsa
2011-03-09 13:59 ` Arnaldo Carvalho de Melo
2011-03-09 14:06 ` Arnaldo Carvalho de Melo
2011-03-09 14:19 ` Jiri Olsa
2011-03-09 14:25 ` Arnaldo Carvalho de Melo
2011-03-11 9:46 ` [tip:perf/core] perf top: Fix " tip-bot for Jiri Olsa
2011-03-07 20:13 ` [PATCH 2/2] perf,top: dont let events to eat up whole header line Jiri Olsa
2011-03-11 9:47 ` [tip:perf/core] perf top: Don't " tip-bot for Jiri Olsa
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.