diff options
| author | Linux Build Service Account <lnxbuild@quicinc.com> | 2018-01-09 15:40:28 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-01-09 15:40:27 -0800 |
| commit | 8be6297f82e767dda6809e3d3dcb93dd7939cc20 (patch) | |
| tree | 7da373c235052dad4281da93c2f37e11ff13a248 /kernel/sched | |
| parent | 30bcab60e77cf4e5b1724ce4184a76c2dacaa1ba (diff) | |
| parent | 9c933388d8783e46d50c1fd049bd2be68f3d32f5 (diff) | |
Merge "sched: Fix spinlock recursion in sched_exit()"
Diffstat (limited to 'kernel/sched')
| -rw-r--r-- | kernel/sched/core.c | 2 | ||||
| -rw-r--r-- | kernel/sched/hmp.c | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 1d91c012b5d8..cec7fe8059a1 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2325,11 +2325,11 @@ void sched_exit(struct task_struct *p) reset_task_stats(p); p->ravg.mark_start = wallclock; p->ravg.sum_history[0] = EXITING_TASK_MARKER; - free_task_load_ptrs(p); enqueue_task(rq, p, 0); clear_ed_task(p, rq); task_rq_unlock(rq, p, &flags); + free_task_load_ptrs(p); } #endif /* CONFIG_SCHED_HMP */ diff --git a/kernel/sched/hmp.c b/kernel/sched/hmp.c index ae6876e62c0f..70a556f0dd06 100644 --- a/kernel/sched/hmp.c +++ b/kernel/sched/hmp.c @@ -1526,6 +1526,10 @@ unsigned int cpu_temp(int cpu) return 0; } +/* + * kfree() may wakeup kswapd. So this function should NOT be called + * with any CPU's rq->lock acquired. + */ void free_task_load_ptrs(struct task_struct *p) { kfree(p->ravg.curr_window_cpu); |
