mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-09 19:39:56 +00:00
workqueue: make sysfs of unbound kworker cpumask more clever
[ Upstream commit d25302e465 ]
Some unfriendly component, such as dpdk, write the same mask to
unbound kworker cpumask again and again. Every time it write to
this interface some work is queue to cpu, even though the mask
is same with the original mask.
So, fix it by return success and do nothing if the cpumask is
equal with the old one.
Signed-off-by: Mengen Sun <mengensun@tencent.com>
Signed-off-by: Menglong Dong <imagedong@tencent.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
75bbf9642b
commit
ab816ffa09
@@ -5340,9 +5340,6 @@ int workqueue_set_unbound_cpumask(cpumask_var_t cpumask)
|
||||
int ret = -EINVAL;
|
||||
cpumask_var_t saved_cpumask;
|
||||
|
||||
if (!zalloc_cpumask_var(&saved_cpumask, GFP_KERNEL))
|
||||
return -ENOMEM;
|
||||
|
||||
/*
|
||||
* Not excluding isolated cpus on purpose.
|
||||
* If the user wishes to include them, we allow that.
|
||||
@@ -5350,6 +5347,15 @@ int workqueue_set_unbound_cpumask(cpumask_var_t cpumask)
|
||||
cpumask_and(cpumask, cpumask, cpu_possible_mask);
|
||||
if (!cpumask_empty(cpumask)) {
|
||||
apply_wqattrs_lock();
|
||||
if (cpumask_equal(cpumask, wq_unbound_cpumask)) {
|
||||
ret = 0;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
if (!zalloc_cpumask_var(&saved_cpumask, GFP_KERNEL)) {
|
||||
ret = -ENOMEM;
|
||||
goto out_unlock;
|
||||
}
|
||||
|
||||
/* save the old wq_unbound_cpumask. */
|
||||
cpumask_copy(saved_cpumask, wq_unbound_cpumask);
|
||||
@@ -5362,10 +5368,11 @@ int workqueue_set_unbound_cpumask(cpumask_var_t cpumask)
|
||||
if (ret < 0)
|
||||
cpumask_copy(wq_unbound_cpumask, saved_cpumask);
|
||||
|
||||
free_cpumask_var(saved_cpumask);
|
||||
out_unlock:
|
||||
apply_wqattrs_unlock();
|
||||
}
|
||||
|
||||
free_cpumask_var(saved_cpumask);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user