Commit 4e231c79 authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Ingo Molnar

perf: Fix up delayed_put_task_struct()

I missed a perf_event_ctxp user when converting it to an array. Pull this
last user into perf_event.c as well and fix it up.
Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
LKML-Reference: <new-submission>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 1b9a644f
...@@ -889,6 +889,7 @@ extern void perf_event_task_sched_out(struct task_struct *task, struct task_stru ...@@ -889,6 +889,7 @@ extern void perf_event_task_sched_out(struct task_struct *task, struct task_stru
extern int perf_event_init_task(struct task_struct *child); extern int perf_event_init_task(struct task_struct *child);
extern void perf_event_exit_task(struct task_struct *child); extern void perf_event_exit_task(struct task_struct *child);
extern void perf_event_free_task(struct task_struct *task); extern void perf_event_free_task(struct task_struct *task);
extern void perf_event_delayed_put(struct task_struct *task);
extern void set_perf_event_pending(void); extern void set_perf_event_pending(void);
extern void perf_event_do_pending(void); extern void perf_event_do_pending(void);
extern void perf_event_print_debug(void); extern void perf_event_print_debug(void);
...@@ -1067,6 +1068,7 @@ perf_event_task_sched_out(struct task_struct *task, ...@@ -1067,6 +1068,7 @@ perf_event_task_sched_out(struct task_struct *task,
static inline int perf_event_init_task(struct task_struct *child) { return 0; } static inline int perf_event_init_task(struct task_struct *child) { return 0; }
static inline void perf_event_exit_task(struct task_struct *child) { } static inline void perf_event_exit_task(struct task_struct *child) { }
static inline void perf_event_free_task(struct task_struct *task) { } static inline void perf_event_free_task(struct task_struct *task) { }
static inline void perf_event_delayed_put(struct task_struct *task) { }
static inline void perf_event_do_pending(void) { } static inline void perf_event_do_pending(void) { }
static inline void perf_event_print_debug(void) { } static inline void perf_event_print_debug(void) { }
static inline int perf_event_task_disable(void) { return -EINVAL; } static inline int perf_event_task_disable(void) { return -EINVAL; }
......
...@@ -149,9 +149,7 @@ static void delayed_put_task_struct(struct rcu_head *rhp) ...@@ -149,9 +149,7 @@ static void delayed_put_task_struct(struct rcu_head *rhp)
{ {
struct task_struct *tsk = container_of(rhp, struct task_struct, rcu); struct task_struct *tsk = container_of(rhp, struct task_struct, rcu);
#ifdef CONFIG_PERF_EVENTS perf_event_delayed_put(tsk);
WARN_ON_ONCE(tsk->perf_event_ctxp);
#endif
trace_sched_process_free(tsk); trace_sched_process_free(tsk);
put_task_struct(tsk); put_task_struct(tsk);
} }
......
...@@ -5893,6 +5893,14 @@ void perf_event_free_task(struct task_struct *task) ...@@ -5893,6 +5893,14 @@ void perf_event_free_task(struct task_struct *task)
} }
} }
void perf_event_delayed_put(struct task_struct *task)
{
int ctxn;
for_each_task_context_nr(ctxn)
WARN_ON_ONCE(task->perf_event_ctxp[ctxn]);
}
/* /*
* inherit a event from parent task to child task: * inherit a event from parent task to child task:
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment