>>> On Sun, Apr 22, 2007 at  4:50 AM, in message <[EMAIL PROTECTED]>,
Avi Kivity <[EMAIL PROTECTED]> wrote: 
> Gregory Haskins wrote:
>>      /*
>> +     * Signal that we have transitioned back to host mode 
>> +     */
>> +    spin_lock_irqsave(&vcpu- >irq.lock, irq_flags);
>> +    vcpu- >irq.guest_mode = 0;
>> +    spin_unlock_irqrestore(&vcpu- >irq.lock, irq_flags);
>> +
>>   
> 
> You need to check for an interrupt here. Otherwise you might go back to 
> user mode and sleep there, no?


It's subtle, but I'm not sure if you need to or not.  I'm glad you brought it 
up because its something I wanted to talk about.  The case where interrupts are 
raised outside the guest_mode brackets is obviously handled since we inject a 
signal, so the area in question is while guest_mode  = 1.

In the simple case, an async-interrupt comes in and sends an IPI to cause a 
VMEXIT.  The guest exits with an EXTERNAL_INTERRUPT exception (IIUC), and the 
current handler causes the system to loop back into the VMENTER code (and thus 
injecting the interrupt).

If the guest exits because of HLT, this is also handled since the current 
handle_halt() code checks if there are pending interrupts first before allowing 
the halt.   If there are interrupts, its loops back into VMENTER.

For other cases, (e.g. the guest is VMEXITing for a reason other than the IPI)  
the guest may need some userspace assistance:  e.g. MMIO servicing, exception 
handling, etc..  In this case, looping back to VMENTER would be incorrect.  The 
current code already handles this correctly too.  However, the potential 
problem (as you pointed out) is if the userspace wants to sleep after servicing 
those types of requests, but doesn't realize that it cannot due to a pending 
interrupt.  I currently am not sure if this is a problem or not since halt is 
handled.  

Are there any other userspace sleeps that we need to handle (e.g. maybe AIO)?  
If so, one way to handle this is to mark the exportable state of the VCPU such 
that userspace can tell if interrupts are pending.  However, I'm not really 
sure if this is the best way to do it or if it can be easily done in a way that 
doesn't break ABI compatiblity.  Please advise. 

-Greg


-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
kvm-devel mailing list
kvm-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/kvm-devel

Reply via email to