All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@web.de>
To: Gleb Natapov <gleb@redhat.com>, Marcelo Tosatti <mtosatti@redhat.com>
Cc: kvm <kvm@vger.kernel.org>
Subject: [PATCH] KVM: x86: Avoid busy loops over uninjectable pending APIC timers
Date: Sat, 16 Mar 2013 21:49:07 +0100	[thread overview]
Message-ID: <5144DAC3.7080401@web.de> (raw)

From: Jan Kiszka <jan.kiszka@siemens.com>

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.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---

Not a critical issue, we are looping fully interruptible, but it's ugly
to do so IMHO.

 arch/x86/kvm/lapic.c |    4 +++-
 1 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c
index a8e9369..658abf5 100644
--- a/arch/x86/kvm/lapic.c
+++ b/arch/x86/kvm/lapic.c
@@ -1473,7 +1473,9 @@ int apic_has_pending_timer(struct kvm_vcpu *vcpu)
 	struct kvm_lapic *apic = vcpu->arch.apic;
 
 	if (kvm_vcpu_has_lapic(vcpu) && apic_enabled(apic) &&
-			apic_lvt_enabled(apic, APIC_LVTT))
+	    apic_lvt_enabled(apic, APIC_LVTT) &&
+	    !apic_test_vector(apic_lvt_vector(apic, APIC_LVTT),
+					      apic->regs + APIC_IRR))
 		return atomic_read(&apic->lapic_timer.pending);
 
 	return 0;
-- 
1.7.3.4

             reply	other threads:[~2013-03-16 20:49 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-03-16 20:49 Jan Kiszka [this message]
2013-03-17  8:47 ` [PATCH] KVM: x86: Avoid busy loops over uninjectable pending APIC timers Gleb Natapov
2013-03-17 10:45   ` Jan Kiszka
2013-03-17 10:47     ` Gleb Natapov
2013-03-20 19:30       ` Marcelo Tosatti
2013-03-20 20:03         ` Marcelo Tosatti
2013-03-20 21:32           ` Gleb Natapov
2013-03-20 23:19             ` Marcelo Tosatti
2013-03-21  4:54               ` Gleb Natapov
2013-03-21 14:02                 ` Marcelo Tosatti
2013-03-21 14:18                   ` Gleb Natapov
2013-03-21 14:27                     ` Zhang, Yang Z
2013-03-21 16:27                       ` Gleb Natapov
2013-03-21 20:51                         ` Marcelo Tosatti
2013-03-21 21:13                           ` Gleb Natapov
2013-03-21 23:06                             ` Marcelo Tosatti
2013-03-22  1:50                               ` Zhang, Yang Z
2013-03-22  6:53                               ` Gleb Natapov
2013-03-22 10:43                                 ` Marcelo Tosatti
2013-03-22 11:19                                   ` Gleb Natapov
2013-03-24 10:45                                     ` Zhang, Yang Z
2013-03-24 19:03                                       ` Gleb Natapov
2013-04-28 10:15   ` Jan Kiszka
2013-04-28 10:19     ` Gleb Natapov
2013-04-28 10:20       ` Jan Kiszka
2013-04-28 10:23         ` Gleb Natapov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5144DAC3.7080401@web.de \
    --to=jan.kiszka@web.de \
    --cc=gleb@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.