kvm.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2] KVM: PIC: call ack notifiers for irqs that are dropped form irr
@ 2012-07-26  7:00 Gleb Natapov
  2012-07-26  7:00 ` [PATCH 2/2] KVM: cleanup pic reset Gleb Natapov
  2012-07-26  9:09 ` [PATCH 1/2] KVM: PIC: call ack notifiers for irqs that are dropped form irr Avi Kivity
  0 siblings, 2 replies; 5+ messages in thread
From: Gleb Natapov @ 2012-07-26  7:00 UTC (permalink / raw)
  To: kvm; +Cc: avi, mtosatti

After commit 242ec97c358256 PIT interrupts are no longer delivered after
PIC reset. It happens because PIT injects interrupt only if previous one
was acked, but since on PIC reset it is dropped from irr it will never
be delivered and hence acknowledged. Fix that by calling ack notifier on
PIC reset.

Signed-off-by: Gleb Natapov <gleb@redhat.com>
---
 arch/x86/kvm/i8259.c |   17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
index 81cf4fa..0147d16 100644
--- a/arch/x86/kvm/i8259.c
+++ b/arch/x86/kvm/i8259.c
@@ -305,6 +305,11 @@ static void pic_ioport_write(void *opaque, u32 addr, u32 val)
 	addr &= 1;
 	if (addr == 0) {
 		if (val & 0x10) {
+			u8 edge_irr = s->irr & ~s->elcr;
+			int i;
+			bool found;
+			struct kvm_vcpu *vcpu;
+
 			s->init4 = val & 1;
 			s->last_irr = 0;
 			s->irr &= s->elcr;
@@ -322,6 +327,18 @@ static void pic_ioport_write(void *opaque, u32 addr, u32 val)
 			if (val & 0x08)
 				pr_pic_unimpl(
 					"level sensitive irq not supported");
+
+			kvm_for_each_vcpu(i, vcpu, s->pics_state->kvm)
+				if (kvm_apic_accept_pic_intr(vcpu)) {
+					found = true;
+					break;
+				}
+
+
+			if (found)
+				for (irq = 0; irq < PIC_NUM_PINS/2; irq++)
+					if (edge_irr & (1 << irq))
+						pic_clear_isr(s, irq);
 		} else if (val & 0x08) {
 			if (val & 0x04)
 				s->poll = 1;
-- 
1.7.10


^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-07-26  9:18 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-26  7:00 [PATCH 1/2] KVM: PIC: call ack notifiers for irqs that are dropped form irr Gleb Natapov
2012-07-26  7:00 ` [PATCH 2/2] KVM: cleanup pic reset Gleb Natapov
2012-07-26  9:09 ` [PATCH 1/2] KVM: PIC: call ack notifiers for irqs that are dropped form irr Avi Kivity
2012-07-26  9:11   ` Gleb Natapov
2012-07-26  9:18     ` Avi Kivity

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).