workqueue: Move attrs->cpumask out of worker_pool's properties when attrs->affn_strict
Allow more pools can be shared when attrs->affn_strict. Signed-off-by: Lai Jiangshan <jiangshan.ljs@antgroup.com> Signed-off-by: Tejun Heo <tj@kernel.org>
This commit is contained in:
+8
-5
@@ -4625,6 +4625,8 @@ static void wqattrs_clear_for_pool(struct workqueue_attrs *attrs)
|
||||
{
|
||||
attrs->affn_scope = WQ_AFFN_NR_TYPES;
|
||||
attrs->ordered = false;
|
||||
if (attrs->affn_strict)
|
||||
cpumask_copy(attrs->cpumask, cpu_possible_mask);
|
||||
}
|
||||
|
||||
/* hash value of the content of @attr */
|
||||
@@ -4633,11 +4635,12 @@ static u32 wqattrs_hash(const struct workqueue_attrs *attrs)
|
||||
u32 hash = 0;
|
||||
|
||||
hash = jhash_1word(attrs->nice, hash);
|
||||
hash = jhash(cpumask_bits(attrs->cpumask),
|
||||
BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long), hash);
|
||||
hash = jhash_1word(attrs->affn_strict, hash);
|
||||
hash = jhash(cpumask_bits(attrs->__pod_cpumask),
|
||||
BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long), hash);
|
||||
hash = jhash_1word(attrs->affn_strict, hash);
|
||||
if (!attrs->affn_strict)
|
||||
hash = jhash(cpumask_bits(attrs->cpumask),
|
||||
BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long), hash);
|
||||
return hash;
|
||||
}
|
||||
|
||||
@@ -4647,11 +4650,11 @@ static bool wqattrs_equal(const struct workqueue_attrs *a,
|
||||
{
|
||||
if (a->nice != b->nice)
|
||||
return false;
|
||||
if (!cpumask_equal(a->cpumask, b->cpumask))
|
||||
if (a->affn_strict != b->affn_strict)
|
||||
return false;
|
||||
if (!cpumask_equal(a->__pod_cpumask, b->__pod_cpumask))
|
||||
return false;
|
||||
if (a->affn_strict != b->affn_strict)
|
||||
if (!a->affn_strict && !cpumask_equal(a->cpumask, b->cpumask))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user