lkml.org 
[lkml]   [2017]   [May]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [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@linux.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

\
 
 \ /
  Last update: 2017-05-10 21:22    [W:0.097 / U:0.208 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site