s390 cio: Rewrite trace point in s390_cio_interrupt
authorThomas Richter <tmricht@linux.ibm.com>
Tue, 3 Jul 2018 07:41:12 +0000 (09:41 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 23 Jul 2018 11:49:52 +0000 (13:49 +0200)
Tools like 'perf stat' parse the trace point format files defined
in /sys/kernel/debug/tracing/events/s390/.../format to handle
the print fmt: statement. The kernel provides a library in
directory linux/tools/lib/traceevent/* for this reason.

This library can not handle structures or unions defined in
the TRACE_EVENT/TP_STRUCT__entry macros with __field_struct macro.
There is no possibility to extract a structure member
(which might be a bit field) since there is no packing
information nor bit field offset by parsing the printf fmt line.

Therefore rewrite the TRACE_EVENT macro and add the
__field macro for the necessary fields.
Keep the __fieldstruct macro to extract the complete
structure when dumps are analysed.

Note that the same information is displayed, this is no
interface change.

Signed-off-by: Thomas Richter <tmricht@linux.ibm.com>
Reviewed-by: Peter Oberparleiter <oberpar@linux.ibm.com>
Acked-by: Sebastian Ott <sebott@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
drivers/s390/cio/trace.h

index 1f8d1c1e566de7749a2d3177ea24c415bba9a921..ab0144c8a7d38c8d47409006eb238aae7d3907b0 100644 (file)
@@ -299,16 +299,20 @@ TRACE_EVENT(s390_cio_interrupt,
                __field(u8, cssid)
                __field(u8, ssid)
                __field(u16, schno)
+               __field(u8, isc)
+               __field(u8, type)
        ),
        TP_fast_assign(
                __entry->tpi_info = *tpi_info;
-               __entry->cssid = __entry->tpi_info.schid.cssid;
-               __entry->ssid = __entry->tpi_info.schid.ssid;
-               __entry->schno = __entry->tpi_info.schid.sch_no;
+               __entry->cssid = tpi_info->schid.cssid;
+               __entry->ssid = tpi_info->schid.ssid;
+               __entry->schno = tpi_info->schid.sch_no;
+               __entry->isc = tpi_info->isc;
+               __entry->type = tpi_info->type;
        ),
        TP_printk("schid=%x.%x.%04x isc=%d type=%d",
                  __entry->cssid, __entry->ssid, __entry->schno,
-                 __entry->tpi_info.isc, __entry->tpi_info.type
+                 __entry->isc, __entry->type
        )
 );