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: Peter Zijlstra <a.p.zijlstra@chello.nl> LKML-Reference: <new-submission> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
1b9a644fec
commit
4e231c7962
|
@ -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,
|
||||||
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)
|
||||||
{
|
{
|
||||||
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 @@ again:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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:
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue