mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-25 08:02:56 +00:00
genirq/affinity: Consider that CPUs on nodes can be unbalanced
commit08d835dff9
upstream. If CPUs on a node are offline at boot time, the number of nodes is different when building affinity masks for present cpus and when building affinity masks for possible cpus. This causes the following problem: In the case that the number of vectors is less than the number of nodes there are cases where bits of masks for present cpus are overwritten when building masks for possible cpus. Fix this by excluding CPUs, which are not part of the current build mask (present/possible). [ tglx: Massaged changelog and added comment ] Fixes:b825921990
("genirq/affinity: Spread IRQs to all available NUMA nodes") Signed-off-by: Rei Yamamoto <yamamoto.rei@jp.fujitsu.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Ming Lei <ming.lei@redhat.com> Cc: stable@vger.kernel.org Link: https://lore.kernel.org/r/20220331003309.10891-1-yamamoto.rei@jp.fujitsu.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
d972a14337
commit
5bee751cba
1 changed files with 3 additions and 2 deletions
|
@ -269,8 +269,9 @@ static int __irq_build_affinity_masks(unsigned int startvec,
|
|||
*/
|
||||
if (numvecs <= nodes) {
|
||||
for_each_node_mask(n, nodemsk) {
|
||||
cpumask_or(&masks[curvec].mask, &masks[curvec].mask,
|
||||
node_to_cpumask[n]);
|
||||
/* Ensure that only CPUs which are in both masks are set */
|
||||
cpumask_and(nmsk, cpu_mask, node_to_cpumask[n]);
|
||||
cpumask_or(&masks[curvec].mask, &masks[curvec].mask, nmsk);
|
||||
if (++curvec == last_affv)
|
||||
curvec = firstvec;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue