diff options
-rw-r--r-- | xen/common/sched_sedf.c | 3 | ||||
-rw-r--r-- | xen/common/schedule.c | 3 |
2 files changed, 4 insertions, 2 deletions
diff --git a/xen/common/sched_sedf.c b/xen/common/sched_sedf.c index 70a1bc8056..b1d6a2a3d2 100644 --- a/xen/common/sched_sedf.c +++ b/xen/common/sched_sedf.c @@ -452,7 +452,8 @@ static int sedf_pick_cpu(const struct scheduler *ops, struct vcpu *v) online = SEDF_CPUONLINE(v->domain->cpupool); cpus_and(online_affinity, v->cpu_affinity, *online); - return first_cpu(online_affinity); + return cycle_cpu(v->vcpu_id % cpus_weight(online_affinity) - 1, + online_affinity); } /* diff --git a/xen/common/schedule.c b/xen/common/schedule.c index a116a71dc4..001da3d03a 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -628,7 +628,8 @@ int vcpu_set_affinity(struct vcpu *v, cpumask_t *affinity) old_affinity = v->cpu_affinity; v->cpu_affinity = *affinity; *affinity = old_affinity; - if ( !cpu_isset(v->processor, v->cpu_affinity) ) + if ( VCPU2OP(v)->sched_id == XEN_SCHEDULER_SEDF || + !cpu_isset(v->processor, v->cpu_affinity) ) set_bit(_VPF_migrating, &v->pause_flags); vcpu_schedule_unlock_irq(v); |