perf: make events stream always parsable
[platform/adaptation/renesas_rcar/renesas_kernel.git] / include / uapi / linux / perf_event.h
index 62c25a2..42cb7b6 100644 (file)
@@ -134,8 +134,9 @@ enum perf_event_sample_format {
        PERF_SAMPLE_STACK_USER                  = 1U << 13,
        PERF_SAMPLE_WEIGHT                      = 1U << 14,
        PERF_SAMPLE_DATA_SRC                    = 1U << 15,
+       PERF_SAMPLE_IDENTIFIER                  = 1U << 16,
 
-       PERF_SAMPLE_MAX = 1U << 16,             /* non-ABI */
+       PERF_SAMPLE_MAX = 1U << 17,             /* non-ABI */
 };
 
 /*
@@ -492,12 +493,12 @@ enum perf_event_type {
        /*
         * If perf_event_attr.sample_id_all is set then all event types will
         * have the sample_type selected fields related to where/when
-        * (identity) an event took place (TID, TIME, ID, CPU, STREAM_ID)
-        * described in PERF_RECORD_SAMPLE below, it will be stashed just after
-        * the perf_event_header and the fields already present for the existing
-        * fields, i.e. at the end of the payload. That way a newer perf.data
-        * file will be supported by older perf tools, with these new optional
-        * fields being ignored.
+        * (identity) an event took place (TID, TIME, ID, STREAM_ID, CPU,
+        * IDENTIFIER) described in PERF_RECORD_SAMPLE below, it will be stashed
+        * just after the perf_event_header and the fields already present for
+        * the existing fields, i.e. at the end of the payload. That way a newer
+        * perf.data file will be supported by older perf tools, with these new
+        * optional fields being ignored.
         *
         * struct sample_id {
         *      { u32                   pid, tid; } && PERF_SAMPLE_TID
@@ -505,7 +506,12 @@ enum perf_event_type {
         *      { u64                   id;       } && PERF_SAMPLE_ID
         *      { u64                   stream_id;} && PERF_SAMPLE_STREAM_ID
         *      { u32                   cpu, res; } && PERF_SAMPLE_CPU
+        *      { u64                   id;       } && PERF_SAMPLE_IDENTIFIER
         * } && perf_event_attr::sample_id_all
+        *
+        * Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID.  The
+        * advantage of PERF_SAMPLE_IDENTIFIER is that its position is fixed
+        * relative to header.size.
         */
 
        /*
@@ -594,6 +600,13 @@ enum perf_event_type {
         * struct {
         *      struct perf_event_header        header;
         *
+        *      #
+        *      # Note that PERF_SAMPLE_IDENTIFIER duplicates PERF_SAMPLE_ID.
+        *      # The advantage of PERF_SAMPLE_IDENTIFIER is that its position
+        *      # is fixed relative to header.
+        *      #
+        *
+        *      { u64                   id;       } && PERF_SAMPLE_IDENTIFIER
         *      { u64                   ip;       } && PERF_SAMPLE_IP
         *      { u32                   pid, tid; } && PERF_SAMPLE_TID
         *      { u64                   time;     } && PERF_SAMPLE_TIME