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@suse.com>
Reviewed-by: Dario Faggioli <dfaggioli@suse.com>
* 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)) )
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);