RE: [PATCH] KVM: x86: Avoid busy loops over uninjectable pending APIC timers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Gleb Natapov wrote on 2013-03-21:
> On Thu, Mar 21, 2013 at 11:02:24AM -0300, Marcelo Tosatti wrote:
>> On Thu, Mar 21, 2013 at 06:54:46AM +0200, Gleb Natapov wrote:
>>> On Wed, Mar 20, 2013 at 08:19:13PM -0300, Marcelo Tosatti wrote:
>>>> On Wed, Mar 20, 2013 at 11:32:38PM +0200, Gleb Natapov wrote:
>>>>> On Wed, Mar 20, 2013 at 05:03:19PM -0300, Marcelo Tosatti wrote:
>>>>>> On Wed, Mar 20, 2013 at 04:30:33PM -0300, Marcelo Tosatti wrote:
>>>>>>> On Sun, Mar 17, 2013 at 12:47:17PM +0200, Gleb Natapov wrote:
>>>>>>>> On Sun, Mar 17, 2013 at 11:45:34AM +0100, Jan Kiszka wrote:
>>>>>>>>> On 2013-03-17 09:47, Gleb Natapov wrote:
>>>>>>>>>> On Sat, Mar 16, 2013 at 09:49:07PM +0100, Jan Kiszka wrote:
>>>>>>>>>>> From: Jan Kiszka <jan.kiszka@xxxxxxxxxxx>
>>>>>>>>>>> 
>>>>>>>>>>> If the guest didn't take the last APIC timer interrupt yet and
>>>>>>>>>>> generates another one on top, e.g. via periodic mode, we do
>>>>>>>>>>> not block the VCPU even if the guest state is halted. The
>>>>>>>>>>> reason is that apic_has_pending_timer continues to return a
>>>>>>>>>>> non-zero value.
>>>>>>>>>>> 
>>>>>>>>>>> Fix this busy loop by taking the IRR content for the LVT vector in
>>>>>>>>>>> apic_has_pending_timer into account.
>>>>>>>>>>> 
>>>>>>>>>> Just drop coalescing tacking for lapic interrupt. After posted
>>>>>>>>>> interrupt will be merged __apic_accept_irq() will not longer
>>>>>>>>>> return coalescing information, so the code will be dead anyway.
>>>>>>>>> 
>>>>>>>>> That requires the RTC decoalescing series to go first to avoid a
>>>>>>>>> regression, no? Then let's postpone this topic for now.
>>>>>>>>> 
>>>>>>>> Yes, but decoalescing will work only for RTC :(
>>>>>>> 
>>>>>>> Are you proposing to drop LAPIC interrupt reinjection?
>>>>>> 
>>>>>> Since timer handling and injection is VCPU-local for LAPIC,
>>>>>> __apic_accept_irq can (and must) return coalesced information (cannot
>>>>>> drop LAPIC interrupt reinjection).
>>>>>> 
>>>>> Why can't we drop LAPIC interrupt reinjection? Proposed posted
>>>>> interrupt patches do not properly check for interrupt coalescing
>>>>> even for VCPU-local injection.
>>>>> 
>>>>> --
>>>>> 			Gleb.
>>>> 
>>>> Because older Linux guests depend on reinjection for proper timekeeping.
>>> Which versions? Those without kvmclock? Can we make them use PIT
>>> instead? Posted interrupts going to break them.
>> 
>> There is no reason to break them if its OK to receive reinjection info
>> from LAPIC... its a matter of returning the information from
>> apic_accept_irq, no big deal.
>> 
> But current PI patches do break them, thats my point. So we either
> need to revise them again, or drop LAPIC timer reinjection. Making
> apic_accept_irq semantics "it returns coalescing info, but only sometimes"
> is dubious though.
We may rollback to the initial idea: test both irr and pir to get coalescing info. In this case, inject LAPIC timer always in vcpu context. So apic_accept_irq() will return right coalescing info.
Also, we need to add comments to tell caller, apic_accept_irq() can ensure the return value is correct only when caller is in target vcpu context.

Best regards,
Yang


--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux