2014-02-28 06:23:26

by Mike Galbraith

[permalink] [raw]
Subject: [patch] rt,sched,numa: Move task_numa_free() to __put_task_struct(), which -rt offloads


Bad idea:
[ 908.026136] [<ffffffff8150ad6a>] rt_spin_lock_slowlock+0xaa/0x2c0
[ 908.026145] [<ffffffff8108f701>] task_numa_free+0x31/0x130
[ 908.026151] [<ffffffff8108121e>] finish_task_switch+0xce/0x100
[ 908.026156] [<ffffffff81509c0a>] thread_return+0x48/0x4ae
[ 908.026160] [<ffffffff8150a095>] schedule+0x25/0xa0
[ 908.026163] [<ffffffff8150ad95>] rt_spin_lock_slowlock+0xd5/0x2c0
[ 908.026170] [<ffffffff810658cf>] get_signal_to_deliver+0xaf/0x680
[ 908.026175] [<ffffffff8100242d>] do_signal+0x3d/0x5b0
[ 908.026179] [<ffffffff81002a30>] do_notify_resume+0x90/0xe0
[ 908.026186] [<ffffffff81513176>] int_signal+0x12/0x17
[ 908.026193] [<00007ff2a388b1d0>] 0x7ff2a388b1cf

Signed-off-by: Mike Galbraith <[email protected]>

diff --git a/kernel/fork.c b/kernel/fork.c
index a17621c6cd42..332688e5e7b4 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -237,6 +237,7 @@ void __put_task_struct(struct task_struct *tsk)
WARN_ON(atomic_read(&tsk->usage));
WARN_ON(tsk == current);

+ task_numa_free(tsk);
security_task_free(tsk);
exit_creds(tsk);
delayacct_tsk_free(tsk);
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 6edbef296ece..94a963fd040e 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -2149,8 +2149,6 @@ static void finish_task_switch(struct rq *rq, struct task_struct *prev)
if (mm)
mmdrop(mm);
if (unlikely(prev_state == TASK_DEAD)) {
- task_numa_free(prev);
-
if (prev->sched_class->task_dead)
prev->sched_class->task_dead(prev);



2014-02-28 11:32:21

by Peter Zijlstra

[permalink] [raw]
Subject: Re: [patch] rt,sched,numa: Move task_numa_free() to __put_task_struct(), which -rt offloads

On Fri, Feb 28, 2014 at 07:23:11AM +0100, Mike Galbraith wrote:
>
> Bad idea:
> [ 908.026136] [<ffffffff8150ad6a>] rt_spin_lock_slowlock+0xaa/0x2c0
> [ 908.026145] [<ffffffff8108f701>] task_numa_free+0x31/0x130
> [ 908.026151] [<ffffffff8108121e>] finish_task_switch+0xce/0x100
> [ 908.026156] [<ffffffff81509c0a>] thread_return+0x48/0x4ae
> [ 908.026160] [<ffffffff8150a095>] schedule+0x25/0xa0
> [ 908.026163] [<ffffffff8150ad95>] rt_spin_lock_slowlock+0xd5/0x2c0
> [ 908.026170] [<ffffffff810658cf>] get_signal_to_deliver+0xaf/0x680
> [ 908.026175] [<ffffffff8100242d>] do_signal+0x3d/0x5b0
> [ 908.026179] [<ffffffff81002a30>] do_notify_resume+0x90/0xe0
> [ 908.026186] [<ffffffff81513176>] int_signal+0x12/0x17
> [ 908.026193] [<00007ff2a388b1d0>] 0x7ff2a388b1cf
>
> Signed-off-by: Mike Galbraith <[email protected]>

Fair enough; thanks!