Merge tag 'v4.0-rc1' into perf/core, to refresh the tree
[cascardo/linux.git] / include / linux / perf_event.h
index 2b62198..a503100 100644 (file)
@@ -262,9 +262,15 @@ struct pmu {
        int (*event_idx)                (struct perf_event *event); /*optional */
 
        /*
-        * flush branch stack on context-switches (needed in cpu-wide mode)
+        * context-switches callback
         */
-       void (*flush_branch_stack)      (void);
+       void (*sched_task)              (struct perf_event_context *ctx,
+                                       bool sched_in);
+       /*
+        * PMU specific data size
+        */
+       size_t                          task_ctx_size;
+
 };
 
 /**
@@ -300,6 +306,7 @@ struct swevent_hlist {
 #define PERF_ATTACH_CONTEXT    0x01
 #define PERF_ATTACH_GROUP      0x02
 #define PERF_ATTACH_TASK       0x04
+#define PERF_ATTACH_TASK_DATA  0x08
 
 struct perf_cgroup;
 struct ring_buffer;
@@ -504,7 +511,7 @@ struct perf_event_context {
        u64                             generation;
        int                             pin_count;
        int                             nr_cgroups;      /* cgroup evts */
-       int                             nr_branch_stack; /* branch_stack evt */
+       void                            *task_ctx_data; /* pmu specific data */
        struct rcu_head                 rcu_head;
 
        struct delayed_work             orphans_remove;
@@ -558,6 +565,8 @@ extern void perf_event_delayed_put(struct task_struct *task);
 extern void perf_event_print_debug(void);
 extern void perf_pmu_disable(struct pmu *pmu);
 extern void perf_pmu_enable(struct pmu *pmu);
+extern void perf_sched_cb_dec(struct pmu *pmu);
+extern void perf_sched_cb_inc(struct pmu *pmu);
 extern int perf_event_task_disable(void);
 extern int perf_event_task_enable(void);
 extern int perf_event_refresh(struct perf_event *event, int refresh);
@@ -800,6 +809,11 @@ static inline bool has_branch_stack(struct perf_event *event)
        return event->attr.sample_type & PERF_SAMPLE_BRANCH_STACK;
 }
 
+static inline bool needs_branch_stack(struct perf_event *event)
+{
+       return event->attr.branch_sample_type != 0;
+}
+
 extern int perf_output_begin(struct perf_output_handle *handle,
                             struct perf_event *event, unsigned int size);
 extern void perf_output_end(struct perf_output_handle *handle);