[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transi
From: |
Avi Kivity |
Subject: |
Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic |
Date: |
Wed, 12 Sep 2012 11:01:21 +0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:15.0) Gecko/20120828 Thunderbird/15.0 |
On 09/10/2012 04:29 AM, Matthew Ogilvie wrote:
> Intel's definition of "edge triggered" means: "asserted with a
> low-to-high transition at the time an interrupt is registered
> and then kept high until the interrupt is served via one of the
> EOI mechanisms or goes away unhandled."
>
> So the only difference between edge triggered and level triggered
> is in the leading edge, with no difference in the trailing edge.
>
> This bug manifested itself when the guest was Microport UNIX
> System V/386 v2.1 (ca. 1987), because it would sometimes mask
> off IRQ14 in the slave IMR after it had already been asserted.
> The master would still try to deliver an interrupt even though
> IRQ2 had dropped again, resulting in a spurious interupt
> (IRQ15) and a panicked UNIX kernel.
> diff --git a/arch/x86/kvm/i8254.c b/arch/x86/kvm/i8254.c
> index adba28f..5cbba99 100644
> --- a/arch/x86/kvm/i8254.c
> +++ b/arch/x86/kvm/i8254.c
> @@ -302,8 +302,12 @@ static void pit_do_work(struct kthread_work *work)
> }
> spin_unlock(&ps->inject_lock);
> if (inject) {
> - kvm_set_irq(kvm, kvm->arch.vpit->irq_source_id, 0, 1);
> + /* Clear previous interrupt, then create a rising
> + * edge to request another interupt, and leave it at
> + * level=1 until time to inject another one.
> + */
> kvm_set_irq(kvm, kvm->arch.vpit->irq_source_id, 0, 0);
> + kvm_set_irq(kvm, kvm->arch.vpit->irq_source_id, 0, 1);
>
> /*
I thought I understood this, now I'm not sure. How can this be correct?
Real hardware doesn't act like this.
What if the PIT is disabled after this? You're injecting a spurious
interrupt then.
--
error compiling committee.c: too many arguments to function
- [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Matthew Ogilvie, 2012/09/09
- [Qemu-devel] [PATCH 2/2] KVM: i8259: refactor pic_set_irq level logic, Matthew Ogilvie, 2012/09/09
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Maciej W. Rozycki, 2012/09/10
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic,
Avi Kivity <=
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Jan Kiszka, 2012/09/12
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Avi Kivity, 2012/09/12
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Jan Kiszka, 2012/09/12
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Avi Kivity, 2012/09/12
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Matthew Ogilvie, 2012/09/13
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Maciej W. Rozycki, 2012/09/13
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Jan Kiszka, 2012/09/13
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Jan Kiszka, 2012/09/13
- Re: [Qemu-devel] [PATCH 1/2] KVM: fix i8259 interrupt high to low transition logic, Maciej W. Rozycki, 2012/09/13