mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
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:
1 parent
d7d7c642c2
commit
af8becc6b9
2 files changed
+1
-3
No files matched your search
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||