|
@@ -3416,6 +3416,12 @@ static void copy_workqueue_attrs(struct workqueue_attrs *to,
|
|
|
{
|
|
|
to->nice = from->nice;
|
|
|
cpumask_copy(to->cpumask, from->cpumask);
|
|
|
+ /*
|
|
|
+ * Unlike hash and equality test, this function doesn't ignore
|
|
|
+ * ->no_numa as it is used for both pool and wq attrs. Instead,
|
|
|
+ * get_unbound_pool() explicitly clears ->no_numa after copying.
|
|
|
+ */
|
|
|
+ to->no_numa = from->no_numa;
|
|
|
}
|
|
|
|
|
|
/* hash value of the content of @attr */
|
|
@@ -3583,6 +3589,12 @@ static struct worker_pool *get_unbound_pool(const struct workqueue_attrs *attrs)
|
|
|
lockdep_set_subclass(&pool->lock, 1); /* see put_pwq() */
|
|
|
copy_workqueue_attrs(pool->attrs, attrs);
|
|
|
|
|
|
+ /*
|
|
|
+ * no_numa isn't a worker_pool attribute, always clear it. See
|
|
|
+ * 'struct workqueue_attrs' comments for detail.
|
|
|
+ */
|
|
|
+ pool->attrs->no_numa = false;
|
|
|
+
|
|
|
/* if cpumask is contained inside a NUMA node, we belong to that node */
|
|
|
if (wq_numa_enabled) {
|
|
|
for_each_node(node) {
|