diff options
| author | Ingo Molnar <mingo@kernel.org> | 2015-09-05 09:00:30 +0200 |
|---|---|---|
| committer | Ingo Molnar <mingo@kernel.org> | 2015-09-05 09:00:47 +0200 |
| commit | 95cd2ea7d54b41b0b2828587f108fe270d59eede (patch) | |
| tree | 623675092834a6a92ac1ef28cc5abb930c9a11b0 /kernel/kthread.c | |
| parent | 66c117d7fa2ae429911e60d84bf31a90b2b96189 (diff) | |
| parent | e713c80a4e49d4bed5324d24755e42bf01c87556 (diff) | |
Merge branch 'linus' into x86/urgent, to be able to merge a dependent fix
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'kernel/kthread.c')
| -rw-r--r-- | kernel/kthread.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/kernel/kthread.c b/kernel/kthread.c index fdea0bee7b5a..490924cc9e7c 100644 --- a/kernel/kthread.c +++ b/kernel/kthread.c @@ -327,16 +327,30 @@ struct task_struct *kthread_create_on_node(int (*threadfn)(void *data), } EXPORT_SYMBOL(kthread_create_on_node); -static void __kthread_bind(struct task_struct *p, unsigned int cpu, long state) +static void __kthread_bind_mask(struct task_struct *p, const struct cpumask *mask, long state) { - /* Must have done schedule() in kthread() before we set_task_cpu */ + unsigned long flags; + if (!wait_task_inactive(p, state)) { WARN_ON(1); return; } + /* It's safe because the task is inactive. */ - do_set_cpus_allowed(p, cpumask_of(cpu)); + raw_spin_lock_irqsave(&p->pi_lock, flags); + do_set_cpus_allowed(p, mask); p->flags |= PF_NO_SETAFFINITY; + raw_spin_unlock_irqrestore(&p->pi_lock, flags); +} + +static void __kthread_bind(struct task_struct *p, unsigned int cpu, long state) +{ + __kthread_bind_mask(p, cpumask_of(cpu), state); +} + +void kthread_bind_mask(struct task_struct *p, const struct cpumask *mask) +{ + __kthread_bind_mask(p, mask, TASK_UNINTERRUPTIBLE); } /** |
