From: Keir Fraser Date: Mon, 19 Apr 2010 10:07:14 +0000 (+0100) Subject: Simplify continue_hypercall_on_cpu() now that it runs in vcpu context. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~12344 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=f3a1f2d30e5ad2e567b147264f1e93b2c8b1bcb3;p=xen.git 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 --- diff --git a/xen/common/domain.c b/xen/common/domain.c index f67445c77e..c1b32ab087 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -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())