mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
sched: fix error path in cpupool_unassign_cpu_start()
In case moving away all domains from the cpu to be removed is failing in cpupool_unassign_cpu_start() the error path is missing to release sched_res_rculock. The normal exit path is releasing domlist_read_lock instead (this is currently no problem as the reference to the specific rcu lock is not used by rcu_read_unlock()). While at it indent the present error label by one space. Reported-by: Igor Druzhinin <igor.druzhinin@citrix.com> Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Dario Faggioli <dfaggioli@suse.com>
This commit is contained in:
1 parent
8824fd3871
commit
98ed1f43cc
1 file changed
+4
-3
@@ -466,7 +466,7 @@ static int cpupool_unassign_cpu_start(struct cpupool *c, unsigned int cpu)
|
||||
}
|
||||
rcu_read_unlock(&domlist_read_lock);
|
||||
if ( ret )
|
||||
goto out;
|
||||
goto out_rcu;
|
||||
}
|
||||
cpupool_moving_cpu = cpu;
|
||||
atomic_inc(&c->refcnt);
|
||||
@@ -474,8 +474,9 @@ static int cpupool_unassign_cpu_start(struct cpupool *c, unsigned int cpu)
|
||||
cpumask_andnot(c->cpu_valid, c->cpu_valid, cpus);
|
||||
cpumask_and(c->res_valid, c->cpu_valid, &sched_res_mask);
|
||||
|
||||
rcu_read_unlock(&domlist_read_lock);
|
||||
out:
|
||||
out_rcu:
|
||||
rcu_read_unlock(&sched_res_rculock);
|
||||
out:
|
||||
spin_unlock(&cpupool_lock);
|
||||
|
||||
return ret;
|
||||
|
||||