Merge branch 'tip/perf/urgent'
[sfrench/cifs-2.6.git] / include / linux / perf_event.h
index 5547ba68e6e47d851915d1671b0a2a49bfefa4a1..d2a15c0c6f8a9ec767d93d6e52ab93cb2c12db28 100644 (file)
@@ -1143,6 +1143,15 @@ static inline bool branch_sample_priv(const struct perf_event *event)
        return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_PRIV_SAVE;
 }
 
+static inline bool branch_sample_counters(const struct perf_event *event)
+{
+       return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_COUNTERS;
+}
+
+static inline bool branch_sample_call_stack(const struct perf_event *event)
+{
+       return event->attr.branch_sample_type & PERF_SAMPLE_BRANCH_CALL_STACK;
+}
 
 struct perf_sample_data {
        /*
@@ -1177,6 +1186,7 @@ struct perf_sample_data {
        struct perf_callchain_entry     *callchain;
        struct perf_raw_record          *raw;
        struct perf_branch_stack        *br_stack;
+       u64                             *br_stack_cntr;
        union perf_sample_weight        weight;
        union  perf_mem_data_src        data_src;
        u64                             txn;
@@ -1254,7 +1264,8 @@ static inline void perf_sample_save_raw_data(struct perf_sample_data *data,
 
 static inline void perf_sample_save_brstack(struct perf_sample_data *data,
                                            struct perf_event *event,
-                                           struct perf_branch_stack *brs)
+                                           struct perf_branch_stack *brs,
+                                           u64 *brs_cntr)
 {
        int size = sizeof(u64); /* nr */
 
@@ -1262,7 +1273,16 @@ static inline void perf_sample_save_brstack(struct perf_sample_data *data,
                size += sizeof(u64);
        size += brs->nr * sizeof(struct perf_branch_entry);
 
+       /*
+        * The extension space for counters is appended after the
+        * struct perf_branch_stack. It is used to store the occurrences
+        * of events of each branch.
+        */
+       if (brs_cntr)
+               size += brs->nr * sizeof(u64);
+
        data->br_stack = brs;
+       data->br_stack_cntr = brs_cntr;
        data->dyn_size += size;
        data->sample_flags |= PERF_SAMPLE_BRANCH_STACK;
 }