diff options
author | Sergey Senozhatsky <sergey.senozhatsky@gmail.com> | 2012-04-28 14:09:39 +0300 |
---|---|---|
committer | Chris E Ferron <chris.e.ferron@linux.intel.com> | 2012-04-30 09:50:04 -0700 |
commit | fcbb7bd1b563de43ef0b6982df57791cb69654bc (patch) | |
tree | 3235990721a039ec5d78d36afcc53c19342cb2a5 /src/process | |
parent | f2199c76583457baf41caf7a986004c308e027cf (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.cpp | 9 |
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) |