[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 15/17] vmx: VT-d posted-interrupt core logic handling
On 09/22/2015 02:52 PM, Wu, Feng wrote: > > >> -----Original Message----- >> From: Dario Faggioli [mailto:dario.faggioli@xxxxxxxxxx] >> Sent: Tuesday, September 22, 2015 9:40 PM >> To: Wu, Feng; George Dunlap >> Cc: xen-devel@xxxxxxxxxxxxx; Tian, Kevin; Keir Fraser; George Dunlap; Andrew >> Cooper; Jan Beulich >> Subject: Re: [Xen-devel] [PATCH v7 15/17] vmx: VT-d posted-interrupt core >> logic >> handling >> >> On Tue, 2015-09-22 at 13:25 +0000, Wu, Feng wrote: >>> >> >>>> -----Original Message----- >>>> From: George Dunlap [mailto:george.dunlap@xxxxxxxxxx] >> >>> Specifically, consider the following scheduling case happened on >>> pCPUA: >>> vCPUA --> idle --> vCPUB >>> >>> 1. First, vCPUA is running on pCPUA, so the NDST filed in PI >>> descriptor is pCPUA >>> 2. Then vCPUA is switched out and idle is switched in running in >>> pCPUA >>> 3. Sometime later, vCPUB is switched in on pCPUA. However, the NDST >>> field >>> for vCPUA is still pCPUA, and currently, vCPUB is running on it. That >>> means >>> the spurious PI interrupts for vCPUA can disturb vCPUB (because the >>> NDST >>> field is pCPUA), it seems not so good to me. >>> >> Mmm... Ok, but you're not saying what caused the transition from vCPUA >> to idle, and from idle to vCPUB. That matters because, if this all >> happened because blockings and wakeups, it's nothing to do with lazy >> context switch, which is what we are discussing here (in the sense that >> PI data structures would, in those cases, be updated appropriately in >> block and wake hooks). > > Like George mentioned before, Let's assume it is because of tasklets or > vCPU is going to offline to wait device model's IO operations, so idle > is switched in. > >> >> Also, if we're going from vCPUA to vCPUB, even if there's idle in >> between, that can't be done via lazy context switch. > > Yes, in the above scenario, vCPUB to idle transition has nothing to > do with lazy context switch, however, the point here is vCPUA to > idle is related to lazy context switch, and if we don't set the SN > for vCPUA here, it will remain clear and the NDST field of vCPUA > will remain pCPUA, even some time later vCPUB is running on it. > In that case, the spurious Pi interrupts for vCPUA can disturb vCPUB. > >> In fact, in this >> case, __context_switch() must be called at some point (during the idle- >> ->vCPUB switch, if my understanding is correct), and the hook will >> actually get called! > > Yes, the idle to vCPUB switch is covered by __context_switch(), but > it cannot change the PI state of vCPUA at that point. Like mentioned > above, in this case, spurious PI interrupts happens. On the contrary, when __context_switch() is called for the idle -> vcpuB transition in the above scenario, it is *actually* context switching from vcpuA to vcpuB, since vcpuA is still actually on the cpu. Which means that if you add PI code into arch->ctxt_switch_from(), the case you describe above will be handled automatically. So the only downside to doing everything in block(), wake(), and __context_switch() is that if a VM is offline, or preempted by a tasklet, and an interrupt comes in, we will get a spurious PI (i.e., one which interrupts us but we can't do anything useful about). -George _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |