|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen staging] xen/sched: fix locking in restore_vcpu_affinity()
commit 0d10a77cc98dda1b8f9a96954149a872f46048c9
Author: Juergen Gross <jgross@xxxxxxxx>
AuthorDate: Tue Jul 23 11:20:55 2019 +0200
Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CommitDate: Tue Jul 23 12:46:58 2019 +0100
xen/sched: fix locking in restore_vcpu_affinity()
Commit 0763cd2687897b55e7 ("xen/sched: don't disable scheduler on cpus
during suspend") removed a lock in restore_vcpu_affinity() which needs
to stay: cpumask_scratch_cpu() must be protected by the scheduler
lock. restore_vcpu_affinity() is being called by thaw_domains(), so
with multiple domains in the system another domain might already be
running and the scheduler might make use of cpumask_scratch_cpu()
already.
Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
Reviewed-by: Dario Faggioli <dfaggioli@xxxxxxxx>
---
xen/common/schedule.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/xen/common/schedule.c b/xen/common/schedule.c
index 25f6ab388d..349f9624f5 100644
--- a/xen/common/schedule.c
+++ b/xen/common/schedule.c
@@ -708,6 +708,8 @@ void restore_vcpu_affinity(struct domain *d)
* set v->processor of each of their vCPUs to something that will
* make sense for the scheduler of the cpupool in which they are in.
*/
+ lock = vcpu_schedule_lock_irq(v);
+
cpumask_and(cpumask_scratch_cpu(cpu), v->cpu_hard_affinity,
cpupool_domain_cpumask(d));
if ( cpumask_empty(cpumask_scratch_cpu(cpu)) )
@@ -731,6 +733,9 @@ void restore_vcpu_affinity(struct domain *d)
v->processor = cpumask_any(cpumask_scratch_cpu(cpu));
+ spin_unlock_irq(lock);
+
+ /* v->processor might have changed, so reacquire the lock. */
lock = vcpu_schedule_lock_irq(v);
v->processor = sched_pick_cpu(vcpu_scheduler(v), v);
spin_unlock_irq(lock);
--
generated by git-patchbot for /home/xen/git/xen.git#staging
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |