[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 0/3] VMX: Properly handle pi descriptor and per-cpu blocking list
On Thu, 2016-06-23 at 12:33 +0000, Wu, Feng wrote: > > -----Original Message----- > > From: Dario Faggioli [mailto:dario.faggioli@xxxxxxxxxx] > > > > It goes through all the vcpus of all domains, and does not check or > > care whether they are running, runnable or blocked. > > > > Let's look at this in some more details. So, let's assume that > > processor 5 is going away, and that you have the following vcpus > > around: > > > > d0v0 : v->processor = 5, running on cpu 5 > > d0v1 : v->processor = 4, running on cpu 4 > > d1v0 : v->processor = 5, runnable but not running > > d2v3 : v->processor = 5, blocked > > > > for d0v0, we do: > > cpu_disable_scheduler(5) > > set_bit(_VPF_migrating, d0v0->pause_flags); > > vcpu_sleep_nosync(d0v0); > > SCHED_OP(sleep, d0v0); > > csched_vcpu_sleep(d0v0) > > cpu_raise_softirq(5, SCHEDULE_SOFTIRQ); > > vcpu_migrate(d0v0); > > if ( v->is_running || ...) // assume v->is_running is true > > return > Hi Dario, after read this mail again, I get another question, > could you please help me out? > > In the above code flow, we return in vcpu_migrate(d0v0) because > v->is_running == 1, after vcpu_migrate() return, we check: > > if ( v->processor == cpu ) > ret = -EAGAIN; > > In my understand in the above case, 'v->processor' is likely equal to > 'cpu', hence return -EAGAIN. However, in __cpu_disable(), there is > some check as below: > > if ( cpu_disable_scheduler(cpu) ) > BUG(); > Right. But, as the comment inside cpu_disable_scheduler() itself says, we only return -EAGAIN in case we are calling cpu_disable_scheduler for removing a pCPU from a cpupool. In that case, we do not use __cpu_disable(), and hence we can safely return an error value. In that case, in fact, the caller of cpu_disable_scheduler() is cpupool_unassign_cpu_helprer(), which does what's necessary to deal with such error. > Might we hit the BUG() in the above case? > No, because we call cpu_disable_scheduler() from __cpu_disable(), only when system state is SYS_STATE_suspend already, and hence we take the then branch of the 'if', which does never return an error. Regards, Dario -- <<This happens because I choose it to happen!>> (Raistlin Majere) ----------------------------------------------------------------- Dario Faggioli, Ph.D, http://about.me/dario.faggioli Senior Software Engineer, Citrix Systems R&D Ltd., Cambridge (UK) Attachment:
signature.asc _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |