Handle migration of x86 VCPUs between physical CPUs.

If required, context_switch() must pull state off of
old CPU.

Signed-off-by: Keir Fraser <keir@xensource.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2006-01-07 17:52:43 +01:00
1 parent 1198a6a99f
commit 1088bc0f6d
1 file changed
+10
+10
View File
@@ -749,11 +749,21 @@ void context_switch(struct vcpu *prev, struct vcpu *next)
{
unsigned int cpu = smp_processor_id();
ASSERT(local_irq_is_enabled());
set_current(next);
if ( (percpu_ctxt[cpu].curr_vcpu != next) &&
!is_idle_domain(next->domain) )
{
/* This may happen if next has been migrated by the scheduler. */
if ( unlikely(!cpus_empty(next->vcpu_dirty_cpumask)) )
{
ASSERT(!cpu_isset(cpu, next->vcpu_dirty_cpumask));
sync_vcpu_execstate(next);
ASSERT(cpus_empty(next->vcpu_dirty_cpumask));
}
local_irq_disable();
__context_switch();
local_irq_enable();
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.