* [PATCHv3 0/3] perf python: Add support to access tracepoint fields @ 2016-07-16 16:11 Jiri Olsa 2016-07-16 16:11 ` [PATCH 1/3] perf script python: Fix string vs byte array resolving Jiri Olsa ` (2 more replies) 0 siblings, 3 replies; 12+ messages in thread From: Jiri Olsa @ 2016-07-16 16:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat), Jiri Pirko hi, adding support to access tracepoint fields in python scripts. v3 changes: - once again fixed is_printable_array [Steven] - patch 3/3 already merged - added new patch 3/3 with automated test for is_printable_array v2 changes: - most of the patches is already pulled in, this is just leftover - fixed is_printable_array [Steven] - making is_printable_array global - attached unrelated fix 3/3 With this patchset it's possible to access tracepoint fields in event python object like: print "time %u prev_comm=%s prev_pid=%d prev_prio=%d prev_state=0x%x ==> next_comm=%s next_pid=%d next_prio=%d" % ( event.sample_time, event.prev_comm, event.prev_pid, event.prev_prio, event.prev_state, event.next_comm, event.next_pid, event.next_prio) Also available in: git://git.kernel.org/pub/scm/linux/kernel/git/jolsa/perf.git perf/fixes thanks, jirka --- Jiri Olsa (3): perf script python: Fix string vs byte array resolving perf tools: Make is_printable_array global perf tests: Add is_printable_array test tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 4 ++++ tools/perf/tests/is_printable_array.c | 36 ++++++++++++++++++++++++++++++++++++ tools/perf/tests/tests.h | 1 + tools/perf/util/python.c | 12 ------------ tools/perf/util/scripting-engines/trace-event-python.c | 25 ++++++++++++++++++------- tools/perf/util/util.c | 16 ++++++++++++++++ tools/perf/util/util.h | 1 + 8 files changed, 77 insertions(+), 19 deletions(-) create mode 100644 tools/perf/tests/is_printable_array.c ^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH 1/3] perf script python: Fix string vs byte array resolving 2016-07-16 16:11 [PATCHv3 0/3] perf python: Add support to access tracepoint fields Jiri Olsa @ 2016-07-16 16:11 ` Jiri Olsa 2016-07-18 11:44 ` Jiri Pirko 2016-07-19 6:54 ` [tip:perf/core] " tip-bot for Jiri Olsa 2016-07-16 16:11 ` [PATCH 2/3] perf tools: Make is_printable_array global Jiri Olsa 2016-07-16 16:11 ` [PATCH 3/3] perf tests: Add is_printable_array test Jiri Olsa 2 siblings, 2 replies; 12+ messages in thread From: Jiri Olsa @ 2016-07-16 16:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat), Jiri Pirko Jirka reported that python code returns all arrays as strings. This makes impossible to get all items for byte array tracepoint field containing 0x00 value item. Fixing this by scanning full length of the array and returning it as PyByteArray object in case non printable byte is found. Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- .../util/scripting-engines/trace-event-python.c | 39 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 6ac6b7a33f42..7bd6da80533e 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -386,6 +386,21 @@ exit: return pylist; } +static int is_printable_array(char *p, unsigned int len) +{ + unsigned int i; + + if (!p || !len || p[len - 1] != 0) + return 0; + + len--; + + for (i = 0; i < len; i++) { + if (!isprint(p[i]) && !isspace(p[i])) + return 0; + } + return 1; +} static void python_process_tracepoint(struct perf_sample *sample, struct perf_evsel *evsel, @@ -457,14 +472,26 @@ static void python_process_tracepoint(struct perf_sample *sample, pydict_set_item_string_decref(dict, "common_callchain", callchain); } for (field = event->format.fields; field; field = field->next) { - if (field->flags & FIELD_IS_STRING) { - int offset; + unsigned int offset, len; + unsigned long long val; + + if (field->flags & FIELD_IS_ARRAY) { + offset = field->offset; + len = field->size; if (field->flags & FIELD_IS_DYNAMIC) { - offset = *(int *)(data + field->offset); + val = pevent_read_number(scripting_context->pevent, + data + offset, len); + offset = val; + len = offset >> 16; offset &= 0xffff; - } else - offset = field->offset; - obj = PyString_FromString((char *)data + offset); + } + if (field->flags & FIELD_IS_STRING && + is_printable_array(data + offset, len)) { + obj = PyString_FromString((char *) data + offset); + } else { + obj = PyByteArray_FromStringAndSize((const char *) data + offset, len); + field->flags &= ~FIELD_IS_STRING; + } } else { /* FIELD_IS_NUMERIC */ obj = get_field_numeric_entry(event, field, data); } -- 2.4.11 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 1/3] perf script python: Fix string vs byte array resolving 2016-07-16 16:11 ` [PATCH 1/3] perf script python: Fix string vs byte array resolving Jiri Olsa @ 2016-07-18 11:44 ` Jiri Pirko 2016-07-19 6:54 ` [tip:perf/core] " tip-bot for Jiri Olsa 1 sibling, 0 replies; 12+ messages in thread From: Jiri Pirko @ 2016-07-18 11:44 UTC (permalink / raw) To: Jiri Olsa Cc: Arnaldo Carvalho de Melo, lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat) Sat, Jul 16, 2016 at 06:11:18PM CEST, jolsa@kernel.org wrote: >Jirka reported that python code returns all arrays as strings. >This makes impossible to get all items for byte array tracepoint >field containing 0x00 value item. > >Fixing this by scanning full length of the array and returning >it as PyByteArray object in case non printable byte is found. > >Link: http://lkml.kernel.org/n/tip-22f4vhhz5uytegkggy1on8u3@git.kernel.org >Signed-off-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Jiri Pirko <jiri@mellanox.com> >--- > .../util/scripting-engines/trace-event-python.c | 39 ++++++++++++++++++---- > 1 file changed, 33 insertions(+), 6 deletions(-) > >diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c >index 6ac6b7a33f42..7bd6da80533e 100644 >--- a/tools/perf/util/scripting-engines/trace-event-python.c >+++ b/tools/perf/util/scripting-engines/trace-event-python.c >@@ -386,6 +386,21 @@ exit: > return pylist; > } > >+static int is_printable_array(char *p, unsigned int len) >+{ >+ unsigned int i; >+ >+ if (!p || !len || p[len - 1] != 0) >+ return 0; >+ >+ len--; >+ >+ for (i = 0; i < len; i++) { >+ if (!isprint(p[i]) && !isspace(p[i])) >+ return 0; >+ } >+ return 1; >+} > > static void python_process_tracepoint(struct perf_sample *sample, > struct perf_evsel *evsel, >@@ -457,14 +472,26 @@ static void python_process_tracepoint(struct perf_sample *sample, > pydict_set_item_string_decref(dict, "common_callchain", callchain); > } > for (field = event->format.fields; field; field = field->next) { >- if (field->flags & FIELD_IS_STRING) { >- int offset; >+ unsigned int offset, len; >+ unsigned long long val; >+ >+ if (field->flags & FIELD_IS_ARRAY) { >+ offset = field->offset; >+ len = field->size; > if (field->flags & FIELD_IS_DYNAMIC) { >- offset = *(int *)(data + field->offset); >+ val = pevent_read_number(scripting_context->pevent, >+ data + offset, len); >+ offset = val; >+ len = offset >> 16; > offset &= 0xffff; >- } else >- offset = field->offset; >- obj = PyString_FromString((char *)data + offset); >+ } >+ if (field->flags & FIELD_IS_STRING && >+ is_printable_array(data + offset, len)) { >+ obj = PyString_FromString((char *) data + offset); >+ } else { >+ obj = PyByteArray_FromStringAndSize((const char *) data + offset, len); >+ field->flags &= ~FIELD_IS_STRING; >+ } > } else { /* FIELD_IS_NUMERIC */ > obj = get_field_numeric_entry(event, field, data); > } >-- >2.4.11 > ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tip:perf/core] perf script python: Fix string vs byte array resolving 2016-07-16 16:11 ` [PATCH 1/3] perf script python: Fix string vs byte array resolving Jiri Olsa 2016-07-18 11:44 ` Jiri Pirko @ 2016-07-19 6:54 ` tip-bot for Jiri Olsa 1 sibling, 0 replies; 12+ messages in thread From: tip-bot for Jiri Olsa @ 2016-07-19 6:54 UTC (permalink / raw) To: linux-tip-commits Cc: tglx, linux-kernel, namhyung, mingo, hpa, rostedt, acme, jiri, a.p.zijlstra, jolsa, dsahern Commit-ID: 249de6e074580988d3ee4902236803098e2cda4c Gitweb: http://git.kernel.org/tip/249de6e074580988d3ee4902236803098e2cda4c Author: Jiri Olsa <jolsa@kernel.org> AuthorDate: Sat, 16 Jul 2016 18:11:18 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Mon, 18 Jul 2016 19:48:04 -0300 perf script python: Fix string vs byte array resolving Jirka reported that python code returns all arrays as strings. This makes impossible to get all items for byte array tracepoint field containing 0x00 value item. Fixing this by scanning full length of the array and returning it as PyByteArray object in case non printable byte is found. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Reported-and-Tested-by: Jiri Pirko <jiri@mellanox.com> Cc: David Ahern <dsahern@gmail.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/1468685480-18951-2-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- .../util/scripting-engines/trace-event-python.c | 39 ++++++++++++++++++---- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 6ac6b7a..7bd6da8 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -386,6 +386,21 @@ exit: return pylist; } +static int is_printable_array(char *p, unsigned int len) +{ + unsigned int i; + + if (!p || !len || p[len - 1] != 0) + return 0; + + len--; + + for (i = 0; i < len; i++) { + if (!isprint(p[i]) && !isspace(p[i])) + return 0; + } + return 1; +} static void python_process_tracepoint(struct perf_sample *sample, struct perf_evsel *evsel, @@ -457,14 +472,26 @@ static void python_process_tracepoint(struct perf_sample *sample, pydict_set_item_string_decref(dict, "common_callchain", callchain); } for (field = event->format.fields; field; field = field->next) { - if (field->flags & FIELD_IS_STRING) { - int offset; + unsigned int offset, len; + unsigned long long val; + + if (field->flags & FIELD_IS_ARRAY) { + offset = field->offset; + len = field->size; if (field->flags & FIELD_IS_DYNAMIC) { - offset = *(int *)(data + field->offset); + val = pevent_read_number(scripting_context->pevent, + data + offset, len); + offset = val; + len = offset >> 16; offset &= 0xffff; - } else - offset = field->offset; - obj = PyString_FromString((char *)data + offset); + } + if (field->flags & FIELD_IS_STRING && + is_printable_array(data + offset, len)) { + obj = PyString_FromString((char *) data + offset); + } else { + obj = PyByteArray_FromStringAndSize((const char *) data + offset, len); + field->flags &= ~FIELD_IS_STRING; + } } else { /* FIELD_IS_NUMERIC */ obj = get_field_numeric_entry(event, field, data); } ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 2/3] perf tools: Make is_printable_array global 2016-07-16 16:11 [PATCHv3 0/3] perf python: Add support to access tracepoint fields Jiri Olsa 2016-07-16 16:11 ` [PATCH 1/3] perf script python: Fix string vs byte array resolving Jiri Olsa @ 2016-07-16 16:11 ` Jiri Olsa 2016-07-18 11:44 ` Jiri Pirko 2016-07-19 6:54 ` [tip:perf/core] " tip-bot for Jiri Olsa 2016-07-16 16:11 ` [PATCH 3/3] perf tests: Add is_printable_array test Jiri Olsa 2 siblings, 2 replies; 12+ messages in thread From: Jiri Olsa @ 2016-07-16 16:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat), Jiri Pirko It's used from 2 objects in perf, so it's better to keep just one copy. Link: http://lkml.kernel.org/n/tip-dss4lxnywysgpyjd8p7paffg@git.kernel.org Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- tools/perf/util/python.c | 12 ------------ tools/perf/util/scripting-engines/trace-event-python.c | 16 ---------------- tools/perf/util/util.c | 16 ++++++++++++++++ tools/perf/util/util.h | 1 + 4 files changed, 17 insertions(+), 28 deletions(-) diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index d32f97033718..a5fbc012e3df 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -295,18 +295,6 @@ static bool is_tracepoint(struct pyrf_event *pevent) return pevent->evsel->attr.type == PERF_TYPE_TRACEPOINT; } -static int is_printable_array(char *p, unsigned int len) -{ - unsigned int i; - - for (i = 0; i < len; i++) { - if (!isprint(p[i]) && !isspace(p[i])) - return 0; - } - - return 1; -} - static PyObject* tracepoint_field(struct pyrf_event *pe, struct format_field *field) { diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 7bd6da80533e..e0203b979474 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -386,22 +386,6 @@ exit: return pylist; } -static int is_printable_array(char *p, unsigned int len) -{ - unsigned int i; - - if (!p || !len || p[len - 1] != 0) - return 0; - - len--; - - for (i = 0; i < len; i++) { - if (!isprint(p[i]) && !isspace(p[i])) - return 0; - } - return 1; -} - static void python_process_tracepoint(struct perf_sample *sample, struct perf_evsel *evsel, struct addr_location *al) diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 5f44a21955cd..cee559d8c9e8 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c @@ -746,3 +746,19 @@ void print_binary(unsigned char *data, size_t len, } printer(BINARY_PRINT_DATA_END, -1, extra); } + +int is_printable_array(char *p, unsigned int len) +{ + unsigned int i; + + if (!p || !len || p[len - 1] != 0) + return 0; + + len--; + + for (i = 0; i < len; i++) { + if (!isprint(p[i]) && !isspace(p[i])) + return 0; + } + return 1; +} diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h index 843cbba8f9d3..e5f55477491d 100644 --- a/tools/perf/util/util.h +++ b/tools/perf/util/util.h @@ -364,4 +364,5 @@ void print_binary(unsigned char *data, size_t len, extern int sched_getcpu(void); #endif +int is_printable_array(char *p, unsigned int len); #endif /* GIT_COMPAT_UTIL_H */ -- 2.4.11 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 2/3] perf tools: Make is_printable_array global 2016-07-16 16:11 ` [PATCH 2/3] perf tools: Make is_printable_array global Jiri Olsa @ 2016-07-18 11:44 ` Jiri Pirko 2016-07-19 6:54 ` [tip:perf/core] " tip-bot for Jiri Olsa 1 sibling, 0 replies; 12+ messages in thread From: Jiri Pirko @ 2016-07-18 11:44 UTC (permalink / raw) To: Jiri Olsa Cc: Arnaldo Carvalho de Melo, lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat) Sat, Jul 16, 2016 at 06:11:19PM CEST, jolsa@kernel.org wrote: >It's used from 2 objects in perf, so it's better >to keep just one copy. > >Link: http://lkml.kernel.org/n/tip-dss4lxnywysgpyjd8p7paffg@git.kernel.org >Signed-off-by: Jiri Olsa <jolsa@kernel.org> Tested-by: Jiri Pirko <jiri@mellanox.com> ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tip:perf/core] perf tools: Make is_printable_array global 2016-07-16 16:11 ` [PATCH 2/3] perf tools: Make is_printable_array global Jiri Olsa 2016-07-18 11:44 ` Jiri Pirko @ 2016-07-19 6:54 ` tip-bot for Jiri Olsa 1 sibling, 0 replies; 12+ messages in thread From: tip-bot for Jiri Olsa @ 2016-07-19 6:54 UTC (permalink / raw) To: linux-tip-commits Cc: jolsa, hpa, rostedt, jiri, acme, tglx, mingo, namhyung, a.p.zijlstra, dsahern, linux-kernel Commit-ID: accaed2659530b4047678070cb23fd1d9a1c1a59 Gitweb: http://git.kernel.org/tip/accaed2659530b4047678070cb23fd1d9a1c1a59 Author: Jiri Olsa <jolsa@kernel.org> AuthorDate: Sat, 16 Jul 2016 18:11:19 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Mon, 18 Jul 2016 19:49:47 -0300 perf tools: Make is_printable_array global It's used from 2 objects in perf, so it's better to keep just one copy. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Pirko <jiri@mellanox.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/1468685480-18951-3-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/util/python.c | 12 ------------ tools/perf/util/scripting-engines/trace-event-python.c | 16 ---------------- tools/perf/util/util.c | 16 ++++++++++++++++ tools/perf/util/util.h | 1 + 4 files changed, 17 insertions(+), 28 deletions(-) diff --git a/tools/perf/util/python.c b/tools/perf/util/python.c index d32f970..a5fbc01 100644 --- a/tools/perf/util/python.c +++ b/tools/perf/util/python.c @@ -295,18 +295,6 @@ static bool is_tracepoint(struct pyrf_event *pevent) return pevent->evsel->attr.type == PERF_TYPE_TRACEPOINT; } -static int is_printable_array(char *p, unsigned int len) -{ - unsigned int i; - - for (i = 0; i < len; i++) { - if (!isprint(p[i]) && !isspace(p[i])) - return 0; - } - - return 1; -} - static PyObject* tracepoint_field(struct pyrf_event *pe, struct format_field *field) { diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c index 7bd6da8..e0203b9 100644 --- a/tools/perf/util/scripting-engines/trace-event-python.c +++ b/tools/perf/util/scripting-engines/trace-event-python.c @@ -386,22 +386,6 @@ exit: return pylist; } -static int is_printable_array(char *p, unsigned int len) -{ - unsigned int i; - - if (!p || !len || p[len - 1] != 0) - return 0; - - len--; - - for (i = 0; i < len; i++) { - if (!isprint(p[i]) && !isspace(p[i])) - return 0; - } - return 1; -} - static void python_process_tracepoint(struct perf_sample *sample, struct perf_evsel *evsel, struct addr_location *al) diff --git a/tools/perf/util/util.c b/tools/perf/util/util.c index 5f44a21..cee559d 100644 --- a/tools/perf/util/util.c +++ b/tools/perf/util/util.c @@ -746,3 +746,19 @@ void print_binary(unsigned char *data, size_t len, } printer(BINARY_PRINT_DATA_END, -1, extra); } + +int is_printable_array(char *p, unsigned int len) +{ + unsigned int i; + + if (!p || !len || p[len - 1] != 0) + return 0; + + len--; + + for (i = 0; i < len; i++) { + if (!isprint(p[i]) && !isspace(p[i])) + return 0; + } + return 1; +} diff --git a/tools/perf/util/util.h b/tools/perf/util/util.h index 843cbba..e5f5547 100644 --- a/tools/perf/util/util.h +++ b/tools/perf/util/util.h @@ -364,4 +364,5 @@ void print_binary(unsigned char *data, size_t len, extern int sched_getcpu(void); #endif +int is_printable_array(char *p, unsigned int len); #endif /* GIT_COMPAT_UTIL_H */ ^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH 3/3] perf tests: Add is_printable_array test 2016-07-16 16:11 [PATCHv3 0/3] perf python: Add support to access tracepoint fields Jiri Olsa 2016-07-16 16:11 ` [PATCH 1/3] perf script python: Fix string vs byte array resolving Jiri Olsa 2016-07-16 16:11 ` [PATCH 2/3] perf tools: Make is_printable_array global Jiri Olsa @ 2016-07-16 16:11 ` Jiri Olsa 2016-07-18 11:46 ` Jiri Pirko 2016-07-19 6:55 ` [tip:perf/core] " tip-bot for Jiri Olsa 2 siblings, 2 replies; 12+ messages in thread From: Jiri Olsa @ 2016-07-16 16:11 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat), Jiri Pirko Add automated test for is_printable_array function. Link: http://lkml.kernel.org/n/tip-if70lj3zhdc3csdqm5webjvc@git.kernel.org Signed-off-by: Jiri Olsa <jolsa@kernel.org> --- tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 4 ++++ tools/perf/tests/is_printable_array.c | 36 +++++++++++++++++++++++++++++++++++ tools/perf/tests/tests.h | 1 + 4 files changed, 42 insertions(+) create mode 100644 tools/perf/tests/is_printable_array.c diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build index 4158422cc2a6..cb20ae1c0d35 100644 --- a/tools/perf/tests/Build +++ b/tools/perf/tests/Build @@ -40,6 +40,7 @@ perf-y += event_update.o perf-y += event-times.o perf-y += backward-ring-buffer.o perf-y += sdt.o +perf-y += is_printable_array.o $(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build $(call rule_mkdir) diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c index 4dd2d050788a..10eb30686c9c 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -222,6 +222,10 @@ static struct test generic_tests[] = { .func = test__sdt_event, }, { + .desc = "Test is_printable_array function", + .func = test__is_printable_array, + }, + { .func = NULL, }, }; diff --git a/tools/perf/tests/is_printable_array.c b/tools/perf/tests/is_printable_array.c new file mode 100644 index 000000000000..42e13393e502 --- /dev/null +++ b/tools/perf/tests/is_printable_array.c @@ -0,0 +1,36 @@ +#include <linux/compiler.h> +#include "tests.h" +#include "debug.h" +#include "util.h" + +int test__is_printable_array(int subtest __maybe_unused) +{ + char buf1[] = { 'k', 'r', 4, 'v', 'a', 0 }; + char buf2[] = { 'k', 'r', 'a', 'v', 4, 0 }; + struct { + char *buf; + unsigned int len; + int ret; + } t[] = { + { (char *) "krava", sizeof("krava"), 1 }, + { (char *) "krava", sizeof("krava") - 1, 0 }, + { (char *) "", sizeof(""), 1 }, + { (char *) "", 0, 0 }, + { NULL, 0, 0 }, + { buf1, sizeof(buf1), 0 }, + { buf2, sizeof(buf2), 0 }, + }; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(t); i++) { + int ret; + + ret = is_printable_array((char *) t[i].buf, t[i].len); + if (ret != t[i].ret) { + pr_err("failed: test %u\n", i); + return TEST_FAIL; + } + } + + return TEST_OK; +} diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index a0288f8092b2..9bfc0e06c61a 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -89,6 +89,7 @@ int test__event_times(int subtest); int test__backward_ring_buffer(int subtest); int test__cpu_map_print(int subtest); int test__sdt_event(int subtest); +int test__is_printable_array(int subtest); #if defined(__arm__) || defined(__aarch64__) #ifdef HAVE_DWARF_UNWIND_SUPPORT -- 2.4.11 ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] perf tests: Add is_printable_array test 2016-07-16 16:11 ` [PATCH 3/3] perf tests: Add is_printable_array test Jiri Olsa @ 2016-07-18 11:46 ` Jiri Pirko 2016-07-18 12:14 ` Jiri Olsa 2016-07-19 6:55 ` [tip:perf/core] " tip-bot for Jiri Olsa 1 sibling, 1 reply; 12+ messages in thread From: Jiri Pirko @ 2016-07-18 11:46 UTC (permalink / raw) To: Jiri Olsa Cc: Arnaldo Carvalho de Melo, lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat) Sat, Jul 16, 2016 at 06:11:20PM CEST, jolsa@kernel.org wrote: >Add automated test for is_printable_array function. > >Link: http://lkml.kernel.org/n/tip-if70lj3zhdc3csdqm5webjvc@git.kernel.org >Signed-off-by: Jiri Olsa <jolsa@kernel.org> >--- > tools/perf/tests/Build | 1 + > tools/perf/tests/builtin-test.c | 4 ++++ > tools/perf/tests/is_printable_array.c | 36 +++++++++++++++++++++++++++++++++++ > tools/perf/tests/tests.h | 1 + > 4 files changed, 42 insertions(+) > create mode 100644 tools/perf/tests/is_printable_array.c > >diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build >index 4158422cc2a6..cb20ae1c0d35 100644 >--- a/tools/perf/tests/Build >+++ b/tools/perf/tests/Build >@@ -40,6 +40,7 @@ perf-y += event_update.o > perf-y += event-times.o > perf-y += backward-ring-buffer.o > perf-y += sdt.o >+perf-y += is_printable_array.o > > $(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build > $(call rule_mkdir) >diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c >index 4dd2d050788a..10eb30686c9c 100644 >--- a/tools/perf/tests/builtin-test.c >+++ b/tools/perf/tests/builtin-test.c >@@ -222,6 +222,10 @@ static struct test generic_tests[] = { > .func = test__sdt_event, > }, > { >+ .desc = "Test is_printable_array function", >+ .func = test__is_printable_array, >+ }, >+ { > .func = NULL, > }, > }; >diff --git a/tools/perf/tests/is_printable_array.c b/tools/perf/tests/is_printable_array.c >new file mode 100644 >index 000000000000..42e13393e502 >--- /dev/null >+++ b/tools/perf/tests/is_printable_array.c >@@ -0,0 +1,36 @@ >+#include <linux/compiler.h> >+#include "tests.h" >+#include "debug.h" >+#include "util.h" >+ >+int test__is_printable_array(int subtest __maybe_unused) >+{ >+ char buf1[] = { 'k', 'r', 4, 'v', 'a', 0 }; >+ char buf2[] = { 'k', 'r', 'a', 'v', 4, 0 }; >+ struct { >+ char *buf; >+ unsigned int len; >+ int ret; >+ } t[] = { >+ { (char *) "krava", sizeof("krava"), 1 }, >+ { (char *) "krava", sizeof("krava") - 1, 0 }, "a cow" ? Really? :)) ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] perf tests: Add is_printable_array test 2016-07-18 11:46 ` Jiri Pirko @ 2016-07-18 12:14 ` Jiri Olsa 2016-07-18 22:49 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 12+ messages in thread From: Jiri Olsa @ 2016-07-18 12:14 UTC (permalink / raw) To: Jiri Pirko Cc: Jiri Olsa, Arnaldo Carvalho de Melo, lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat) On Mon, Jul 18, 2016 at 01:46:02PM +0200, Jiri Pirko wrote: SNIP > >diff --git a/tools/perf/tests/is_printable_array.c b/tools/perf/tests/is_printable_array.c > >new file mode 100644 > >index 000000000000..42e13393e502 > >--- /dev/null > >+++ b/tools/perf/tests/is_printable_array.c > >@@ -0,0 +1,36 @@ > >+#include <linux/compiler.h> > >+#include "tests.h" > >+#include "debug.h" > >+#include "util.h" > >+ > >+int test__is_printable_array(int subtest __maybe_unused) > >+{ > >+ char buf1[] = { 'k', 'r', 4, 'v', 'a', 0 }; > >+ char buf2[] = { 'k', 'r', 'a', 'v', 4, 0 }; > >+ struct { > >+ char *buf; > >+ unsigned int len; > >+ int ret; > >+ } t[] = { > >+ { (char *) "krava", sizeof("krava"), 1 }, > >+ { (char *) "krava", sizeof("krava") - 1, 0 }, > > "a cow" ? Really? :)) yea, trying to force it as 'perf animal' instead of that pony stuff ;-) http://www.brendangregg.com/blog/2015-07-08/choosing-a-linux-tracer.html jirka ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH 3/3] perf tests: Add is_printable_array test 2016-07-18 12:14 ` Jiri Olsa @ 2016-07-18 22:49 ` Arnaldo Carvalho de Melo 0 siblings, 0 replies; 12+ messages in thread From: Arnaldo Carvalho de Melo @ 2016-07-18 22:49 UTC (permalink / raw) To: Jiri Olsa Cc: Jiri Pirko, Jiri Olsa, lkml, David Ahern, Ingo Molnar, Namhyung Kim, Peter Zijlstra, Steven Rostedt (Red Hat) Em Mon, Jul 18, 2016 at 02:14:09PM +0200, Jiri Olsa escreveu: > On Mon, Jul 18, 2016 at 01:46:02PM +0200, Jiri Pirko wrote: > > SNIP > > > >diff --git a/tools/perf/tests/is_printable_array.c b/tools/perf/tests/is_printable_array.c > > >new file mode 100644 > > >index 000000000000..42e13393e502 > > >--- /dev/null > > >+++ b/tools/perf/tests/is_printable_array.c > > >@@ -0,0 +1,36 @@ > > >+#include <linux/compiler.h> > > >+#include "tests.h" > > >+#include "debug.h" > > >+#include "util.h" > > >+ > > >+int test__is_printable_array(int subtest __maybe_unused) > > >+{ > > >+ char buf1[] = { 'k', 'r', 4, 'v', 'a', 0 }; > > >+ char buf2[] = { 'k', 'r', 'a', 'v', 4, 0 }; > > >+ struct { > > >+ char *buf; > > >+ unsigned int len; > > >+ int ret; > > >+ } t[] = { > > >+ { (char *) "krava", sizeof("krava"), 1 }, > > >+ { (char *) "krava", sizeof("krava") - 1, 0 }, > > > > "a cow" ? Really? :)) > > yea, trying to force it as 'perf animal' instead of that pony stuff ;-) > > http://www.brendangregg.com/blog/2015-07-08/choosing-a-linux-tracer.html Yeah, a vaca! 8-) - ARnaldo ^ permalink raw reply [flat|nested] 12+ messages in thread
* [tip:perf/core] perf tests: Add is_printable_array test 2016-07-16 16:11 ` [PATCH 3/3] perf tests: Add is_printable_array test Jiri Olsa 2016-07-18 11:46 ` Jiri Pirko @ 2016-07-19 6:55 ` tip-bot for Jiri Olsa 1 sibling, 0 replies; 12+ messages in thread From: tip-bot for Jiri Olsa @ 2016-07-19 6:55 UTC (permalink / raw) To: linux-tip-commits Cc: jiri, acme, jolsa, hpa, a.p.zijlstra, namhyung, tglx, dsahern, linux-kernel, mingo, rostedt Commit-ID: 988dd774dcbd9151c2a643fc7284c5c3c4d0adb7 Gitweb: http://git.kernel.org/tip/988dd774dcbd9151c2a643fc7284c5c3c4d0adb7 Author: Jiri Olsa <jolsa@kernel.org> AuthorDate: Sat, 16 Jul 2016 18:11:20 +0200 Committer: Arnaldo Carvalho de Melo <acme@redhat.com> CommitDate: Mon, 18 Jul 2016 19:50:35 -0300 perf tests: Add is_printable_array test Add automated test for is_printable_array function. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: David Ahern <dsahern@gmail.com> Cc: Jiri Pirko <jiri@mellanox.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/1468685480-18951-4-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> --- tools/perf/tests/Build | 1 + tools/perf/tests/builtin-test.c | 4 ++++ tools/perf/tests/is_printable_array.c | 36 +++++++++++++++++++++++++++++++++++ tools/perf/tests/tests.h | 1 + 4 files changed, 42 insertions(+) diff --git a/tools/perf/tests/Build b/tools/perf/tests/Build index 4158422..cb20ae1 100644 --- a/tools/perf/tests/Build +++ b/tools/perf/tests/Build @@ -40,6 +40,7 @@ perf-y += event_update.o perf-y += event-times.o perf-y += backward-ring-buffer.o perf-y += sdt.o +perf-y += is_printable_array.o $(OUTPUT)tests/llvm-src-base.c: tests/bpf-script-example.c tests/Build $(call rule_mkdir) diff --git a/tools/perf/tests/builtin-test.c b/tools/perf/tests/builtin-test.c index 4dd2d05..10eb306 100644 --- a/tools/perf/tests/builtin-test.c +++ b/tools/perf/tests/builtin-test.c @@ -222,6 +222,10 @@ static struct test generic_tests[] = { .func = test__sdt_event, }, { + .desc = "Test is_printable_array function", + .func = test__is_printable_array, + }, + { .func = NULL, }, }; diff --git a/tools/perf/tests/is_printable_array.c b/tools/perf/tests/is_printable_array.c new file mode 100644 index 0000000..42e1339 --- /dev/null +++ b/tools/perf/tests/is_printable_array.c @@ -0,0 +1,36 @@ +#include <linux/compiler.h> +#include "tests.h" +#include "debug.h" +#include "util.h" + +int test__is_printable_array(int subtest __maybe_unused) +{ + char buf1[] = { 'k', 'r', 4, 'v', 'a', 0 }; + char buf2[] = { 'k', 'r', 'a', 'v', 4, 0 }; + struct { + char *buf; + unsigned int len; + int ret; + } t[] = { + { (char *) "krava", sizeof("krava"), 1 }, + { (char *) "krava", sizeof("krava") - 1, 0 }, + { (char *) "", sizeof(""), 1 }, + { (char *) "", 0, 0 }, + { NULL, 0, 0 }, + { buf1, sizeof(buf1), 0 }, + { buf2, sizeof(buf2), 0 }, + }; + unsigned int i; + + for (i = 0; i < ARRAY_SIZE(t); i++) { + int ret; + + ret = is_printable_array((char *) t[i].buf, t[i].len); + if (ret != t[i].ret) { + pr_err("failed: test %u\n", i); + return TEST_FAIL; + } + } + + return TEST_OK; +} diff --git a/tools/perf/tests/tests.h b/tools/perf/tests/tests.h index a0288f8..9bfc0e0 100644 --- a/tools/perf/tests/tests.h +++ b/tools/perf/tests/tests.h @@ -89,6 +89,7 @@ int test__event_times(int subtest); int test__backward_ring_buffer(int subtest); int test__cpu_map_print(int subtest); int test__sdt_event(int subtest); +int test__is_printable_array(int subtest); #if defined(__arm__) || defined(__aarch64__) #ifdef HAVE_DWARF_UNWIND_SUPPORT ^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2016-07-19 6:55 UTC | newest] Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2016-07-16 16:11 [PATCHv3 0/3] perf python: Add support to access tracepoint fields Jiri Olsa 2016-07-16 16:11 ` [PATCH 1/3] perf script python: Fix string vs byte array resolving Jiri Olsa 2016-07-18 11:44 ` Jiri Pirko 2016-07-19 6:54 ` [tip:perf/core] " tip-bot for Jiri Olsa 2016-07-16 16:11 ` [PATCH 2/3] perf tools: Make is_printable_array global Jiri Olsa 2016-07-18 11:44 ` Jiri Pirko 2016-07-19 6:54 ` [tip:perf/core] " tip-bot for Jiri Olsa 2016-07-16 16:11 ` [PATCH 3/3] perf tests: Add is_printable_array test Jiri Olsa 2016-07-18 11:46 ` Jiri Pirko 2016-07-18 12:14 ` Jiri Olsa 2016-07-18 22:49 ` Arnaldo Carvalho de Melo 2016-07-19 6:55 ` [tip:perf/core] " tip-bot for Jiri Olsa
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).