Discussion:
[PATCH] fix irq_handler_entry description
Sergey Senozhatsky
2012-04-28 11:09:39 UTC
Permalink
|commit 2a86bf81403f54acd213c4f326ab214b372fe061
|Author: Arjan van de Ven <arjan-VuQAYsv1563Yd54FQh9/***@public.gmane.org>
|Date: Fri Apr 27 16:37:40 2012 -0400
|
| this is a hack, and broken, but it seems the trace event infrastructure throws us a curve ball here

didn't solve the problem for me, as I still obverse some interrupts with empty descriptions.
Patch (code extracted from pevent print_event_fields()) seem to fix the problem.

Signed-off-by: Sergey Senozhatsky <sergey.senozhatsky-***@public.gmane.org>

---

src/process/do_process.cpp | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/process/do_process.cpp b/src/process/do_process.cpp
index c030d47..246db58 100644
--- a/src/process/do_process.cpp
+++ b/src/process/do_process.cpp
@@ -338,14 +338,19 @@ void perf_process_bundle::handle_trace_point(void *trace, int cpu, uint64_t time

}
else if (strcmp(event->name, "irq_handler_entry") == 0) {
+ unsigned long long offset, len;
class interrupt *irq;
const char *handler;
int nr;

field = pevent_find_any_field(event, "name");
- if (!field)
+ if (!field || !(field->flags & FIELD_IS_STRING))
return; /* ?? */
- handler = (char *)trace + field->offset + sizeof(long);
+ offset = field->offset;
+ len = field->size;
+ offset = pevent_read_number(event->pevent, (char *)trace + offset, len);
+ offset &= 0xffff;
+ handler = (char *)trace + offset;

ret = pevent_get_field_val(NULL, event, "irq", &rec, &val, 0);
if (ret < 0)

Loading...