[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20170510173340.GF32165@htj.duckdns.org>
Date: Wed, 10 May 2017 13:33:40 -0400
From: Tejun Heo <tj@...nel.org>
To: Michael Bringmann <mwb@...ux.vnet.ibm.com>
Cc: Lai Jiangshan <jiangshanlai@...il.com>,
linux-kernel@...r.kernel.org,
Nathan Fontenot <nfont@...ux.vnet.ibm.com>
Subject: Re: [PATCH] workqueue: Ensure that cpumask set for pools created
after boot
Hello,
On Wed, May 10, 2017 at 11:48:17AM -0500, Michael Bringmann wrote:
>
> On NUMA systems with dynamic processors, the content of the cpumask
> may change over time. As new processors are added via DLPAR operations,
> workqueues are created for them. This patch ensures that the pools
> created for new workqueues will be initialized with a cpumask before
> the first worker is created, attached, and woken up. If the mask is
> not set up, then the kernel will crash when 'wakeup_process' is unable
> to find a valid CPU to which to assign the new worker.
>
> Signed-off-by: Michael Bringmann <mwb@...ux.vnet.ibm.com>
> ---
> diff --git a/kernel/workqueue.c b/kernel/workqueue.c
> index c74bf39..6091069 100644
> --- a/kernel/workqueue.c
> +++ b/kernel/workqueue.c
> @@ -3366,6 +3366,8 @@ static struct worker_pool *get_unbound_pool(const struct workqueue_attrs *attrs)
> copy_workqueue_attrs(pool->attrs, attrs);
> pool->node = target_node;
>
> + cpumask_copy(pool->attrs->cpumask, cpumask_of(smp_processor_id()));
What prevents a cpu getting added right here tho?
Maybe the right thing to do is protecting the whole thing with hotplug
readlock?
Thanks.
--
tejun
Powered by blists - more mailing lists