aboutsummaryrefslogtreecommitdiff
path: root/src/process
diff options
context:
space:
mode:
authorSergey Senozhatsky <sergey.senozhatsky@gmail.com>2012-04-28 14:09:39 +0300
committerChris E Ferron <chris.e.ferron@linux.intel.com>2012-04-30 09:50:04 -0700
commitfcbb7bd1b563de43ef0b6982df57791cb69654bc (patch)
tree3235990721a039ec5d78d36afcc53c19342cb2a5 /src/process
parentf2199c76583457baf41caf7a986004c308e027cf (diff)
fix irq_handler_entry description
|commit 2a86bf81403f54acd213c4f326ab214b372fe061 |Author: Arjan van de Ven <arjan@linux.intel.com> |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@gmail.com>
Diffstat (limited to 'src/process')
-rw-r--r--src/process/do_process.cpp9
1 files 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)