diff mbox

[v3,1/8] Do not call ack notifiers on PIC reset.

Message ID 1250079442-5163-2-git-send-email-gleb@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

Gleb Natapov Aug. 12, 2009, 12:17 p.m. UTC
For device assigned it may cause host hang since ack notifier callback
enables host interrupt and guest not necessary cleared interrupt
condition in an assigned device. For PIT we should not call ack notifier
here since interrupt was not acked by a guest and should be redelivered.

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

Comments

Marcelo Tosatti Aug. 13, 2009, 9:11 a.m. UTC | #1
On Wed, Aug 12, 2009 at 03:17:15PM +0300, Gleb Natapov wrote:
> For device assigned it may cause host hang since ack notifier callback
> enables host interrupt and guest not necessary cleared interrupt
> condition in an assigned device. For PIT we should not call ack notifier
> here since interrupt was not acked by a guest and should be redelivered.
> 
> Signed-off-by: Gleb Natapov <gleb@redhat.com>
> ---
>  arch/x86/kvm/i8259.c |   16 ----------------
>  1 files changed, 0 insertions(+), 16 deletions(-)
> 
> diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
> index 01f1516..eb2b8b7 100644
> --- a/arch/x86/kvm/i8259.c
> +++ b/arch/x86/kvm/i8259.c
> @@ -225,22 +225,6 @@ int kvm_pic_read_irq(struct kvm *kvm)
>  
>  void kvm_pic_reset(struct kvm_kpic_state *s)
>  {
> -	int irq, irqbase, n;
> -	struct kvm *kvm = s->pics_state->irq_request_opaque;
> -	struct kvm_vcpu *vcpu0 = kvm->bsp_vcpu;
> -
> -	if (s == &s->pics_state->pics[0])
> -		irqbase = 0;
> -	else
> -		irqbase = 8;
> -
> -	for (irq = 0; irq < PIC_NUM_PINS/2; irq++) {
> -		if (vcpu0 && kvm_apic_accept_pic_intr(vcpu0))
> -			if (s->irr & (1 << irq) || s->isr & (1 << irq)) {
> -				n = irq + irqbase;
> -				kvm_notify_acked_irq(kvm, SELECT_PIC(n), n);
> -			}
> -	}
>  	s->last_irr = 0;
>  	s->irr = 0;
>  	s->imr = 0;
> -- 
> 1.6.3.3

This used to be necessary to clear pending state from i8254.c
"irq_acked" logic. I think it'll break it.

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

Patch

diff --git a/arch/x86/kvm/i8259.c b/arch/x86/kvm/i8259.c
index 01f1516..eb2b8b7 100644
--- a/arch/x86/kvm/i8259.c
+++ b/arch/x86/kvm/i8259.c
@@ -225,22 +225,6 @@  int kvm_pic_read_irq(struct kvm *kvm)
 
 void kvm_pic_reset(struct kvm_kpic_state *s)
 {
-	int irq, irqbase, n;
-	struct kvm *kvm = s->pics_state->irq_request_opaque;
-	struct kvm_vcpu *vcpu0 = kvm->bsp_vcpu;
-
-	if (s == &s->pics_state->pics[0])
-		irqbase = 0;
-	else
-		irqbase = 8;
-
-	for (irq = 0; irq < PIC_NUM_PINS/2; irq++) {
-		if (vcpu0 && kvm_apic_accept_pic_intr(vcpu0))
-			if (s->irr & (1 << irq) || s->isr & (1 << irq)) {
-				n = irq + irqbase;
-				kvm_notify_acked_irq(kvm, SELECT_PIC(n), n);
-			}
-	}
 	s->last_irr = 0;
 	s->irr = 0;
 	s->imr = 0;