[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-4.1-testing] Avoid endless loop for vcpu migration.
# HG changeset patch # User Juergen Gross <juergen.gross@xxxxxxxxxxxxxx> # Date 1300468650 0 # Node ID 6d2308425c8971dab366c41e05e10e136ef371be # Parent 64644ab2c2e36e6155e6ea7c65a9af3aaf171590 Avoid endless loop for vcpu migration. Only call SCHED_OP(pick_cpu) if a previously picked cpu is not suitable on the current iteration of the retry loop. Signed-off-by: Juergen Gross <juergen.gross@xxxxxxxxxxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxx> xen-unstable changeset: 23043:3caed2112c65 xen-unstable date: Tue Mar 15 10:14:27 2011 +0000 --- diff -r 64644ab2c2e3 -r 6d2308425c89 xen/common/schedule.c --- a/xen/common/schedule.c Wed Mar 16 17:11:54 2011 +0000 +++ b/xen/common/schedule.c Fri Mar 18 17:17:30 2011 +0000 @@ -395,6 +395,7 @@ unsigned long flags; unsigned int old_cpu, new_cpu; spinlock_t *old_lock, *new_lock; + bool_t pick_called = 0; old_cpu = new_cpu = v->processor; for ( ; ; ) @@ -426,14 +427,33 @@ spin_lock(old_lock); } - /* Select new CPU. */ old_cpu = v->processor; if ( old_lock == per_cpu(schedule_data, old_cpu).schedule_lock ) { + /* + * If we selected a CPU on the previosu iteration, check if it + * remains suitable for running this vCPU. + */ + if ( pick_called && + (new_lock == per_cpu(schedule_data, new_cpu).schedule_lock) && + cpu_isset(new_cpu, v->cpu_affinity) && + cpu_isset(new_cpu, v->domain->cpupool->cpu_valid) ) + break; + + /* Select a new CPU. */ new_cpu = SCHED_OP(VCPU2OP(v), pick_cpu, v); if ( (new_lock == per_cpu(schedule_data, new_cpu).schedule_lock) && cpu_isset(new_cpu, v->domain->cpupool->cpu_valid) ) break; + pick_called = 1; + } + else + { + /* + * We do not hold the scheduler lock appropriate for this vCPU. + * Thus we cannot select a new CPU on this iteration. Try again. + */ + pick_called = 0; } if ( old_lock != new_lock ) _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |