|
|
|
|
|
|
|
|
|
|
xen-changelog
[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
|
<Prev in Thread] |
Current Thread |
[Next in Thread> |
- [Xen-changelog] [xen-4.1-testing] Avoid endless loop for vcpu migration.,
Xen patchbot-4 . 1-testing <=
|
|
|
|
|