Commit ae1296a7 authored by Lai Jiangshan's avatar Lai Jiangshan Committed by Tejun Heo

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: default avatarLai Jiangshan <jiangshan.ljs@antgroup.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent e7cc3be6
...@@ -185,6 +185,9 @@ struct workqueue_attrs { ...@@ -185,6 +185,9 @@ struct workqueue_attrs {
* Below fields aren't properties of a worker_pool. They only modify how * Below fields aren't properties of a worker_pool. They only modify how
* :c:func:`apply_workqueue_attrs` select pools and thus don't * :c:func:`apply_workqueue_attrs` select pools and thus don't
* participate in pool hash calculations or equality comparisons. * participate in pool hash calculations or equality comparisons.
*
* If @affn_strict is set, @cpumask isn't a property of a worker_pool
* either.
*/ */
/** /**
......
...@@ -4625,6 +4625,8 @@ static void wqattrs_clear_for_pool(struct workqueue_attrs *attrs) ...@@ -4625,6 +4625,8 @@ static void wqattrs_clear_for_pool(struct workqueue_attrs *attrs)
{ {
attrs->affn_scope = WQ_AFFN_NR_TYPES; attrs->affn_scope = WQ_AFFN_NR_TYPES;
attrs->ordered = false; attrs->ordered = false;
if (attrs->affn_strict)
cpumask_copy(attrs->cpumask, cpu_possible_mask);
} }
/* hash value of the content of @attr */ /* hash value of the content of @attr */
...@@ -4633,11 +4635,12 @@ static u32 wqattrs_hash(const struct workqueue_attrs *attrs) ...@@ -4633,11 +4635,12 @@ static u32 wqattrs_hash(const struct workqueue_attrs *attrs)
u32 hash = 0; u32 hash = 0;
hash = jhash_1word(attrs->nice, hash); hash = jhash_1word(attrs->nice, hash);
hash = jhash(cpumask_bits(attrs->cpumask), hash = jhash_1word(attrs->affn_strict, hash);
BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long), hash);
hash = jhash(cpumask_bits(attrs->__pod_cpumask), hash = jhash(cpumask_bits(attrs->__pod_cpumask),
BITS_TO_LONGS(nr_cpumask_bits) * sizeof(long), hash); 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; return hash;
} }
...@@ -4647,11 +4650,11 @@ static bool wqattrs_equal(const struct workqueue_attrs *a, ...@@ -4647,11 +4650,11 @@ static bool wqattrs_equal(const struct workqueue_attrs *a,
{ {
if (a->nice != b->nice) if (a->nice != b->nice)
return false; return false;
if (!cpumask_equal(a->cpumask, b->cpumask)) if (a->affn_strict != b->affn_strict)
return false; return false;
if (!cpumask_equal(a->__pod_cpumask, b->__pod_cpumask)) if (!cpumask_equal(a->__pod_cpumask, b->__pod_cpumask))
return false; return false;
if (a->affn_strict != b->affn_strict) if (!a->affn_strict && !cpumask_equal(a->cpumask, b->cpumask))
return false; return false;
return true; return true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment