From: Peter Zijlstra <peterz@infradead.org>
To: Lai Jiangshan <laijs@cn.fujitsu.com>
Cc: jjherne@linux.vnet.ibm.com, Sasha Levin <sasha.levin@oracle.com>,
Tejun Heo <tj@kernel.org>, LKML <linux-kernel@vger.kernel.org>,
Dave Jones <davej@redhat.com>, Ingo Molnar <mingo@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>
Subject: Re: workqueue: WARN at at kernel/workqueue.c:2176
Date: Fri, 6 Jun 2014 15:36:29 +0200 [thread overview]
Message-ID: <20140606133629.GP13930@laptop.programming.kicks-ass.net> (raw)
In-Reply-To: <53904C6B.90001@cn.fujitsu.com>
On Thu, Jun 05, 2014 at 06:54:35PM +0800, Lai Jiangshan wrote:
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 268a45e..d05a5a1 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -1474,20 +1474,24 @@ static int ttwu_remote(struct task_struct *p, int wake_flags)
> }
>
> #ifdef CONFIG_SMP
> -static void sched_ttwu_pending(void)
> +static void sched_ttwu_pending_locked(struct rq *rq)
> {
> - struct rq *rq = this_rq();
> struct llist_node *llist = llist_del_all(&rq->wake_list);
> struct task_struct *p;
>
> - raw_spin_lock(&rq->lock);
> -
> while (llist) {
> p = llist_entry(llist, struct task_struct, wake_entry);
> llist = llist_next(llist);
> ttwu_do_activate(rq, p, 0);
> }
> +}
>
> +static void sched_ttwu_pending(void)
> +{
> + struct rq *rq = this_rq();
> +
> + raw_spin_lock(&rq->lock);
> + sched_ttwu_pending_locked(rq);
> raw_spin_unlock(&rq->lock);
> }
OK, so this won't apply to a recent kernel.
> @@ -4530,6 +4534,11 @@ int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)
> goto out;
>
> dest_cpu = cpumask_any_and(cpu_active_mask, new_mask);
> +
> + /* Ensure it is on rq for migration if it is waking */
> + if (p->state == TASK_WAKING)
> + sched_ttwu_pending_locked(rq);
So I would really rather like to avoid this if possible, its doing full
remote queueing, exactly what we tried to avoid.
> +
> if (p->on_rq) {
> struct migration_arg arg = { p, dest_cpu };
> /* Need help from migration thread: drop lock and wait. */
> @@ -4576,6 +4585,10 @@ static int __migrate_task(struct task_struct *p, int src_cpu, int dest_cpu)
> if (!cpumask_test_cpu(dest_cpu, tsk_cpus_allowed(p)))
> goto fail;
>
> + /* Ensure it is on rq for migration if it is waking */
> + if (p->state == TASK_WAKING)
> + sched_ttwu_pending_locked(rq_src);
> +
> /*
> * If we're not on a rq, the next wake-up will ensure we're
> * placed properly.
Oh man, another variant.. why did you change it again? And without
explanation for why you changed it.
I don't see a reason to call sched_ttwu_pending() with rq->lock held,
seeing as how we append to that list without it held.
I'm still thinking the previous version is good, can you explain why you
changed it?
next prev parent reply other threads:[~2014-06-06 13:36 UTC|newest]
Thread overview: 50+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-05-12 18:58 workqueue: WARN at at kernel/workqueue.c:2176 Sasha Levin
2014-05-12 20:01 ` Tejun Heo
2014-05-13 2:19 ` Lai Jiangshan
2014-05-13 2:17 ` Sasha Levin
2014-05-14 16:52 ` Jason J. Herne
2014-05-16 3:50 ` Lai Jiangshan
2014-05-16 9:35 ` Peter Zijlstra
2014-05-16 9:56 ` Lai Jiangshan
2014-05-16 10:29 ` Peter Zijlstra
2014-05-16 10:15 ` Peter Zijlstra
2014-05-16 10:16 ` Peter Zijlstra
2014-05-16 10:39 ` Peter Zijlstra
2014-05-16 11:57 ` Peter Zijlstra
2014-05-16 12:08 ` Tejun Heo
2014-05-16 12:14 ` Thomas Gleixner
2014-05-16 12:16 ` Tejun Heo
2014-05-16 16:18 ` Lai Jiangshan
2014-05-16 16:29 ` Peter Zijlstra
2014-05-27 14:18 ` Jason J. Herne
2014-05-27 14:26 ` Peter Zijlstra
2014-05-29 16:23 ` Jason J. Herne
2014-06-03 11:24 ` Lai Jiangshan
2014-06-03 12:45 ` Lai Jiangshan
2014-06-03 14:28 ` Peter Zijlstra
2014-06-04 1:47 ` Lai Jiangshan
2014-06-03 14:16 ` Peter Zijlstra
2014-06-04 2:27 ` Lai Jiangshan
2014-06-04 6:49 ` Peter Zijlstra
2014-06-04 8:25 ` Lai Jiangshan
2014-06-04 9:39 ` Peter Zijlstra
2014-06-05 10:54 ` Lai Jiangshan
2014-06-05 15:22 ` Jason J. Herne
2014-06-06 12:39 ` Jason J. Herne
2014-06-06 13:36 ` Peter Zijlstra [this message]
2014-06-08 2:50 ` Lai Jiangshan
2014-09-01 3:04 ` Lai Jiangshan
2014-09-03 15:15 ` Peter Zijlstra
2014-09-04 2:22 ` Lai Jiangshan
2014-09-04 6:39 ` Peter Zijlstra
2014-06-09 14:01 ` Jason J. Herne
2014-06-10 1:21 ` Lai Jiangshan
2014-06-16 1:30 ` Lai Jiangshan
2014-09-09 14:52 ` [tip:sched/core] sched: Migrate waking tasks tip-bot for Lai Jiangshan
2014-09-10 7:38 ` Kirill Tkhai
2014-09-10 7:53 ` Peter Zijlstra
2014-06-04 2:28 ` workqueue: WARN at at kernel/workqueue.c:2176 Lai Jiangshan
2014-06-04 6:48 ` Peter Zijlstra
2014-05-19 13:07 ` [tip:sched/core] sched: Fix hotplug vs set_cpus_allowed_ptr() tip-bot for Lai Jiangshan
2014-05-22 12:26 ` [tip:sched/core] sched: Fix hotplug vs. set_cpus_allowed_ptr() tip-bot for Lai Jiangshan
2014-05-22 22:02 ` Srivatsa S. Bhat
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140606133629.GP13930@laptop.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=davej@redhat.com \
--cc=jjherne@linux.vnet.ibm.com \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=rostedt@goodmis.org \
--cc=sasha.levin@oracle.com \
--cc=tglx@linutronix.de \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).