Remove the spin on VCPUF_running from context_switch().

It doesn't work because we already set VCPUF_running
locally, and the scheduler should not pick another CPU's
VCPUF_running VCPU anyway, since it mustn't modify the 
processor field.

Instead just add a simple assertion to the scheduler to
ensure the scheduling algorithm is not picking an
inappropriate VCPU.

Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2006-01-17 14:24:42 +01:00
1 parent d7d7c642c2
commit af8becc6b9
2 files changed
+1 -3

No files matched your search

-3
View File
@@ -738,9 +738,6 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
ASSERT(cpus_weight(dirty_mask) <= 1);
if ( unlikely(!cpu_isset(cpu, dirty_mask) && !cpus_empty(dirty_mask)) )
{
/* Make sure the next VCPU is not in a scheduling tail. */
while ( test_bit(_VCPUF_running, &next->vcpu_flags) )
cpu_relax();
/* Other cpus call __sync_lazy_execstate from flush ipi handler. */
if ( !cpus_empty(next->vcpu_dirty_cpumask) )
flush_tlb_mask(next->vcpu_dirty_cpumask);
+1
View File
@@ -420,6 +420,7 @@ static void __enter_scheduler(void)
}
#endif
ASSERT(!test_bit(_VCPUF_running, &next->vcpu_flags));
set_bit(_VCPUF_running, &next->vcpu_flags);
spin_unlock_irq(&schedule_data[cpu].schedule_lock);
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.