projects
/
openwrt
/
staging
/
blogic.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
ad4e3c0
)
perf python: Fix pyrf_evlist__read_on_cpu event consuming
author
Jiri Olsa
<
[email protected]
>
Sun, 10 Jul 2016 11:07:56 +0000
(13:07 +0200)
committer
Arnaldo Carvalho de Melo
<
[email protected]
>
Tue, 12 Jul 2016 19:16:44 +0000
(16:16 -0300)
We can't consume the event before parsing it. Under heavy load we could
get caught by kernel writer overwriting the event we're trying to parse.
Signed-off-by: Jiri Olsa <
[email protected]
>
Cc: David Ahern <
[email protected]
>
Cc: Namhyung Kim <
[email protected]
>
Cc: Peter Zijlstra <
[email protected]
>
Link:
http://lkml.kernel.org/r/
[email protected]
Signed-off-by: Arnaldo Carvalho de Melo <
[email protected]
>
tools/perf/util/python.c
patch
|
blob
|
history
diff --git
a/tools/perf/util/python.c
b/tools/perf/util/python.c
index d0c1267741eecb70b7d94239b93db69e0815ccd1..c68ef03191142c5c0626164b3490e262e5da0d04 100644
(file)
--- a/
tools/perf/util/python.c
+++ b/
tools/perf/util/python.c
@@
-865,12
+865,14
@@
static PyObject *pyrf_evlist__read_on_cpu(struct pyrf_evlist *pevlist,
PyObject *pyevent = pyrf_event__new(event);
struct pyrf_event *pevent = (struct pyrf_event *)pyevent;
- perf_evlist__mmap_consume(evlist, cpu);
-
if (pyevent == NULL)
return PyErr_NoMemory();
err = perf_evlist__parse_sample(evlist, event, &pevent->sample);
+
+ /* Consume the even only after we parsed it out. */
+ perf_evlist__mmap_consume(evlist, cpu);
+
if (err)
return PyErr_Format(PyExc_OSError,
"perf: can't parse sample, err=%d", err);