Hello,

On Tue, Jun 13, 2017 at 03:04:30PM -0500, Michael Bringmann wrote:
> @@ -3564,19 +3564,28 @@ static struct pool_workqueue 
> *alloc_unbound_pwq(struct workqueue_struct *wq,
>  static bool wq_calc_node_cpumask(const struct workqueue_attrs *attrs, int 
> node,
>                                int cpu_going_down, cpumask_t *cpumask)
>  {
> +     cpumask_t       onl_targ_cm;
> +
>       if (!wq_numa_enabled || attrs->no_numa)
>               goto use_dfl;
>  
>       /* does @node have any online CPUs @attrs wants? */
> -     cpumask_and(cpumask, cpumask_of_node(node), attrs->cpumask);
> +     cpumask_and(&onl_targ_cm, cpumask_of_node(node), attrs->cpumask);
>       if (cpu_going_down >= 0)
> -             cpumask_clear_cpu(cpu_going_down, cpumask);
> +             cpumask_clear_cpu(cpu_going_down, &onl_targ_cm);
>  
> -     if (cpumask_empty(cpumask))
> +     if (cpumask_empty(&onl_targ_cm))
>               goto use_dfl;
>  
>       /* yeap, return possible CPUs in @node that @attrs wants */
>       cpumask_and(cpumask, attrs->cpumask, wq_numa_possible_cpumask[node]);
> +
> +     if (cpumask_weight(&onl_targ_cm) > cpumask_weight(cpumask)) {
> +             printk(KERN_INFO "WARNING: WQ cpumask: onl intersect > "
> +                                             "possible intersect\n");
> +             return false;
> +     }

Yeah, alternatively, we can just add right before returning,

        if (WARN_ON(cpumask_empty(cpumask)))
                return false;

Thanks.

-- 
tejun

Reply via email to