From: Avi Kivity <avi@redhat.com>
To: kvm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Subject: [PATCH 26/37] KVM: Reset PIT irq injection logic when the PIT IRQ is unmasked
Date: Fri, 27 Feb 2009 12:26:49 +0200 [thread overview]
Message-ID: <1235730420-7929-27-git-send-email-avi@redhat.com> (raw)
In-Reply-To: <1235730420-7929-1-git-send-email-avi@redhat.com>
While the PIT is masked the guest cannot ack the irq, so the reinject logic
will never allow the interrupt to be injected.
Fix by resetting the reinjection counters on unmask.
Unbreaks Xen.
Signed-off-by: Avi Kivity <avi@redhat.com>
---
arch/x86/kvm/i8254.c | 15 +++++++++++++++
arch/x86/kvm/i8254.h | 1 +
2 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
index 69d1bbf..c13bb92 100644
--- a/arch/x86/kvm/i8254.c
+++ b/arch/x86/kvm/i8254.c
@@ -539,6 +539,16 @@ void kvm_pit_reset(struct kvm_pit *pit)
pit->pit_state.irq_ack = 1;
}
+static void pit_mask_notifer(struct kvm_irq_mask_notifier *kimn, bool mask)
+{
+ struct kvm_pit *pit = container_of(kimn, struct kvm_pit, mask_notifier);
+
+ if (!mask) {
+ atomic_set(&pit->pit_state.pit_timer.pending, 0);
+ pit->pit_state.irq_ack = 1;
+ }
+}
+
struct kvm_pit *kvm_create_pit(struct kvm *kvm)
{
struct kvm_pit *pit;
@@ -586,6 +596,9 @@ struct kvm_pit *kvm_create_pit(struct kvm *kvm)
kvm_pit_reset(pit);
+ pit->mask_notifier.func = pit_mask_notifer;
+ kvm_register_irq_mask_notifier(kvm, 0, &pit->mask_notifier);
+
return pit;
}
@@ -594,6 +607,8 @@ void kvm_free_pit(struct kvm *kvm)
struct hrtimer *timer;
if (kvm->arch.vpit) {
+ kvm_unregister_irq_mask_notifier(kvm, 0,
+ &kvm->arch.vpit->mask_notifier);
mutex_lock(&kvm->arch.vpit->pit_state.lock);
timer = &kvm->arch.vpit->pit_state.pit_timer.timer;
hrtimer_cancel(timer);
diff --git a/arch/x86/kvm/i8254.h b/arch/x86/kvm/i8254.h
index 76959c4..6acbe4b 100644
--- a/arch/x86/kvm/i8254.h
+++ b/arch/x86/kvm/i8254.h
@@ -46,6 +46,7 @@ struct kvm_pit {
struct kvm *kvm;
struct kvm_kpit_state pit_state;
int irq_source_id;
+ struct kvm_irq_mask_notifier mask_notifier;
};
#define KVM_PIT_BASE_ADDRESS 0x40
--
1.6.0.6
next prev parent reply other threads:[~2009-02-27 10:32 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-27 10:26 [PATCH 00/37] KVM Updates for the 2.6.30 merge window (2/3) Avi Kivity
2009-02-27 10:26 ` [PATCH 01/37] KVM: ppc: rename 44x MMU functions used in booke.c Avi Kivity
2009-02-27 10:26 ` [PATCH 02/37] KVM: ppc: remove last 44x-specific bits from booke.c Avi Kivity
2009-02-27 10:26 ` [PATCH 03/37] KVM: ppc: use macros instead of hardcoded literals for instruction decoding Avi Kivity
2009-02-27 10:26 ` [PATCH 04/37] KVM: ppc: split out common Book E instruction emulation Avi Kivity
2009-02-27 10:26 ` [PATCH 05/37] KVM: ppc: Add dbsr in kvm_vcpu_arch Avi Kivity
2009-02-27 10:26 ` [PATCH 06/37] KVM: ppc: No need to include core-header for KVM in asm-offsets.c currently Avi Kivity
2009-02-27 10:26 ` [PATCH 07/37] KVM: ppc: ifdef iccci with CONFIG_44x Avi Kivity
2009-02-27 10:26 ` [PATCH 08/37] KVM: ppc: E500 core-specific code Avi Kivity
2009-02-27 10:26 ` [PATCH 09/37] KVM: ppc: Add kvmppc_mmu_dtlb/itlb_miss for booke Avi Kivity
2009-02-27 10:26 ` [PATCH 10/37] KVM: ppc: distinguish between interrupts and priorities Avi Kivity
2009-02-27 10:26 ` [PATCH 11/37] KVM: ppc: Add extra E500 exceptions Avi Kivity
2009-02-27 10:26 ` [PATCH 12/37] KVM: VMX: Fix guest state validity checks Avi Kivity
2009-02-27 10:26 ` [PATCH 13/37] KVM: VMX: don't clobber segment AR if emulating invalid state Avi Kivity
2009-02-27 10:26 ` [PATCH 14/37] KVM: VMX: Prevent exit handler from running if emulating due to " Avi Kivity
2009-02-27 10:26 ` [PATCH 15/37] KVM: x86 emulator: Make emulate_pop() a little more generic Avi Kivity
2009-02-27 10:26 ` [PATCH 16/37] KVM: VMX: When emulating on invalid vmx state, don't return to userspace unnecessarily Avi Kivity
2009-02-27 10:26 ` [PATCH 17/37] KVM: x86 emulator: implement 'ret far' instruction (opcode 0xcb) Avi Kivity
2009-02-27 10:26 ` [PATCH 18/37] KVM: Properly lock PIT creation Avi Kivity
2009-02-27 10:26 ` [PATCH 19/37] KVM: ppc: remove debug support broken by KVM debug rewrite Avi Kivity
2009-02-27 10:26 ` [PATCH 20/37] KVM: Remove duplicated prototype of kvm_arch_destroy_vm Avi Kivity
2009-02-27 10:26 ` [PATCH 21/37] KVM: Add support to disable MSI for assigned device Avi Kivity
2009-02-27 10:26 ` [PATCH 22/37] KVM: SVM: Add microcode patch level dummy Avi Kivity
2009-02-27 10:26 ` [PATCH 23/37] KVM: MMU: Optimize page unshadowing Avi Kivity
2009-02-27 10:26 ` [PATCH 24/37] KVM: Add CONFIG_HAVE_KVM_IRQCHIP Avi Kivity
2009-02-27 10:26 ` [PATCH 25/37] KVM: Interrupt mask notifiers for ioapic Avi Kivity
2009-02-27 10:26 ` Avi Kivity [this message]
2009-02-27 10:26 ` [PATCH 27/37] KVM: ia64: expose registers in struct kvm_regs Avi Kivity
2009-02-27 10:26 ` [PATCH 28/37] KVM: SVM: Fix typo in has_svm() Avi Kivity
2009-02-27 10:26 ` [PATCH 29/37] KVM: MMU: drop zeroing on mmu_memory_cache_alloc Avi Kivity
2009-02-27 10:26 ` [PATCH 30/37] KVM: MMU: Rename "metaphysical" attribute to "direct" Avi Kivity
2009-02-27 10:26 ` [PATCH 31/37] KVM: MMU: Only enable cr4_pge role in shadow mode Avi Kivity
2009-02-27 10:26 ` [PATCH 32/37] powerpc/fsl-booke: declare tlbcam_index for use in c Avi Kivity
2009-02-27 10:26 ` [PATCH 33/37] KVM: ppc: Fix e500 warnings and some spelling problems Avi Kivity
2009-02-27 10:26 ` [PATCH 34/37] KVM: ppc: Move to new TLB invalidate interface Avi Kivity
2009-02-27 10:26 ` [PATCH 35/37] KVM: x86: Fix typos and whitespace errors Avi Kivity
2009-02-27 10:26 ` [PATCH 36/37] KVM: Userspace controlled irq routing Avi Kivity
2009-02-27 10:27 ` [PATCH 37/37] KVM: Avoid using CONFIG_ in userspace visible headers Avi Kivity
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=1235730420-7929-27-git-send-email-avi@redhat.com \
--to=avi@redhat.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome