|commit 2a86bf81403f54acd213c4f326ab214b372fe061
 |Author: Arjan van de Ven <ar...@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.senozhat...@gmail.com>

---

 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)

_______________________________________________
Power mailing list
Power@bughost.org
https://bughost.org/mailman/listinfo/power

Reply via email to