Simplify continue_hypercall_on_cpu() now that it runs in vcpu context.

We do not need to take so much care over putting the original vcpu to
sleep, as it will not be spinning on progress of the idle vcpu.

Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
This commit is contained in:
Keir Fraser committed 2010-04-19 11:07:14 +01:00
1 parent 10d7e8ed96
commit f3a1f2d30e
1 file changed
+2 -13
+2 -13
View File
@@ -919,19 +919,8 @@ static void continue_hypercall_tasklet_handler(unsigned long _info)
struct migrate_info *info = (struct migrate_info *)_info;
struct vcpu *v = info->vcpu;
/*
* Wait for vcpu to be entirely descheduled. We re-schedule ourselves
* meanwhile to allow other work to be done (e.g., descheduling the vcpu!).
*/
BUG_ON(vcpu_runnable(v));
if ( v->is_running )
{
tasklet_schedule(&v->continue_hypercall_tasklet);
return;
}
/* Once descheduled, we need to gain access to its register state. */
sync_vcpu_execstate(v);
/* Wait for vcpu to sleep so that we can access its register state. */
vcpu_sleep_sync(v);
this_cpu(continue_info) = info;
return_reg(v) = (info->cpu == smp_processor_id())
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.