All of the sched domains will be destroied and then rebuilded when a cpu
online/offline, if a softirq comes after the shced domains are destroied,
this cpu will be stucked in the infinite loop in sched_group_energy(),
because of it can not get the shced donmain in for_each_domain(cpu, sd).
Change-Id: I154cf560e4e1af4a7a2547154ad321e936196ce3
Signed-off-by: Chen Liang <cl@rock-chips.com>
struct sched_group *sg_shared_cap = NULL;
cpu = cpumask_first(&visit_cpus);
+ cpumask_clear_cpu(cpu, &visit_cpus);
/*
* Is the group utilization affected by cpus outside this
total_energy += sg_busy_energy + sg_idle_energy;
- if (!sd->child)
- cpumask_xor(&visit_cpus, &visit_cpus, sched_group_cpus(sg));
+ if (!sd->child) {
+ int i;
+
+ for_each_cpu(i, sched_group_cpus(sg))
+ cpumask_clear_cpu(i, &visit_cpus);
+ }
if (cpumask_equal(sched_group_cpus(sg), sched_group_cpus(eenv->sg_top)))
goto next_cpu;