On 01/18/2012 11:52 PM, Jeremy Fitzhardinge wrote:
On 01/19/2012 12:54 AM, Srivatsa Vaddagiri wrote:
That logic relies on the "kick" being level triggered, so that "kick"
before "block" will cause the block to fall out immediately. If you're
using "hlt" as the block and it has the usual edge-triggered behaviour,
what stops a "kick-before-hlt" from losing the kick?
Hmm ..'hlt' should result in a check for kick request (in hypervisor
context) before vcpu is put to sleep. IOW vcpu1 that is attempting to kick vcpu0
will set a 'somebody_tried_kicking_vcpu0' flag, which hypervisor should check
before it puts vcpu0 to sleep because of trapped 'hlt' instruction.
Won't that trap the 'kick-before-hlt' case? What am I missing here?
Nothing, that sounds fine. It wasn't clear to me that your kick
operation left persistent state, and so has a level-triggered effect on hlt.
btw, this persistent state needs to be saved/restored for live
migration. Best to put it into some MSR.