qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Matthew Ogilvie <mmogilvi_qemu@miniinfo.net>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Jan Kiszka <jan.kiszka@web.de>,
	qemu-devel@nongnu.org, "Maciej W. Rozycki" <macro@linux-mips.org>
Subject: Re: [Qemu-devel] [PATCH v4 5/5] i8259: fix dynamically masking slave IRQs with IMR register
Date: Tue, 4 Sep 2012 22:33:46 -0600	[thread overview]
Message-ID: <20120905043346.GA7965@comcast.net> (raw)
In-Reply-To: <5046135B.2080200@redhat.com>

On Tue, Sep 04, 2012 at 04:42:35PM +0200, Paolo Bonzini wrote:
> Il 04/09/2012 16:29, Maciej W. Rozycki ha scritto:
> >  So first of all, the *output* of the 8259A is always edge triggered, 
> > regardless of whether it's the master or one of the slaves (only one slave 
> > is used in the PC/AT architecture, but up to eight are supported; the 
> > PC/XT had none).  
> 
> I swear I read all your message :) but this seems to be the crux.  It means
> that something like this ought to fix the bug too.  Matthew, can you post
> your code or test it?

The test program source can be downloaded from
http://home.comcast.net/~mmogilvi/downloads/i8259-imr-test-2012-09-02.tar.bz2

I intend to rewrite it for kvm-unit-tests as you suggested earlier, but
likely not before this weekend.

> 
> diff --git a/hw/i8259.c b/hw/i8259.c
> index 53daf78..3dc1dff 100644
> --- a/hw/i8259.c
> +++ b/hw/i8259.c
> @@ -104,12 +104,11 @@ static void pic_update_irq(PICCommonState *s)
>      int irq;
>  
>      irq = pic_get_irq(s);
> +    qemu_irq_lower(s->int_out[0]);
>      if (irq >= 0) {
>          DPRINTF("pic%d: imr=%x irr=%x padd=%d\n",
>                  s->master ? 0 : 1, s->imr, s->irr, s->priority_add);
>          qemu_irq_raise(s->int_out[0]);
> -    } else {
> -        qemu_irq_lower(s->int_out[0]);
>      }
>  }

This doesn't work; the master still locks onto the original low to high
edge, and doesn't cancel it on the high to low edge.  I haven't had a
chance to look into or test your (or any other) KVM patches yet,
although I'll probably get to it this weekend.

According to later discussion, the main issue is actually the input
IRQ behavior on a high to low transition; hence the following fixes
both the test program and the Microport UNIX problem:

diff --git a/hw/i8259.c b/hw/i8259.c
index 6587666..c011787 100644
--- a/hw/i8259.c
+++ b/hw/i8259.c
@@ -143,22 +143,23 @@ static void pic_set_irq(void *opaque, int irq, int level)
     if (s->elcr & mask) {
         /* level triggered */
         if (level) {
             s->irr |= mask;
             s->last_irr |= mask;
         } else {
             s->irr &= ~mask;
             s->last_irr &= ~mask;
         }
     } else {
         /* edge triggered */
         if (level) {
             if ((s->last_irr & mask) == 0) {
                 s->irr |= mask;
             }
             s->last_irr |= mask;
         } else {
+            s->irr &= ~mask;
             s->last_irr &= ~mask;
         }
     }
     pic_update_irq(s);
 }
 

Perhaps it would be worth it to swap around the "if"s a little bit
to avoid the (!level) duplication, and clarify that the only difference
is in the low to high transition?

             - Matthew Ogilvie

  parent reply	other threads:[~2012-09-05  4:33 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-03  2:56 [Qemu-devel] [PATCH v4 0/5] Running Microport UNIX (ca 1987) Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 1/5] fix some debug printf format strings Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 2/5] vl: fix -hdachs/-hda argument order parsing issues Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 3/5] qemu-options.hx: mention retrace= VGA option Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 4/5] vga: add some optional CGA compatibility hacks Matthew Ogilvie
2012-09-03  2:56 ` [Qemu-devel] [PATCH v4 5/5] i8259: fix dynamically masking slave IRQs with IMR register Matthew Ogilvie
2012-09-03  7:08   ` Paolo Bonzini
2012-09-03  8:40   ` Andreas Färber
2012-09-03 14:39     ` Avi Kivity
2012-09-03 15:42       ` Juan Quintela
2012-09-03 15:45         ` Jan Kiszka
2012-09-03 15:52         ` Avi Kivity
2012-09-03 15:54           ` Jan Kiszka
2012-09-03 15:57             ` Avi Kivity
2012-09-03 16:02               ` Jan Kiszka
2012-09-03 16:15                 ` Avi Kivity
2012-09-03 16:23                   ` Paolo Bonzini
2012-09-03 16:30                     ` Avi Kivity
2012-09-03 16:33                       ` Paolo Bonzini
2012-09-03 16:40                         ` Jan Kiszka
2012-09-03 16:56                           ` Paolo Bonzini
2012-09-04  8:16                         ` Avi Kivity
2012-09-04  9:15                           ` Paolo Bonzini
2012-09-04  9:20                             ` Avi Kivity
2012-09-04  9:29                               ` BALATON Zoltan
2012-09-04  9:37                                 ` Avi Kivity
2012-09-04  9:51                                   ` Jan Kiszka
2012-09-04 10:06                                     ` Paolo Bonzini
2012-09-04 10:44                                       ` Avi Kivity
2012-09-03 16:30                   ` Jan Kiszka
2012-09-03  8:51   ` Jan Kiszka
2012-09-03  8:53     ` Jan Kiszka
2012-09-03  9:34     ` Paolo Bonzini
2012-09-03 10:34       ` Jan Kiszka
2012-09-03 11:11         ` Paolo Bonzini
2012-09-03 11:26           ` Jan Kiszka
2012-09-04 14:29     ` Maciej W. Rozycki
2012-09-04 14:42       ` Paolo Bonzini
2012-09-04 16:01         ` Jan Kiszka
2012-09-04 17:41           ` Maciej W. Rozycki
2012-09-04 17:55             ` Jan Kiszka
2012-09-04 18:27               ` Maciej W. Rozycki
2012-09-04 18:39                 ` Jan Kiszka
2012-09-05  4:33         ` Matthew Ogilvie [this message]
2012-09-05 15:43           ` Jan Kiszka

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=20120905043346.GA7965@comcast.net \
    --to=mmogilvi_qemu@miniinfo.net \
    --cc=jan.kiszka@web.de \
    --cc=macro@linux-mips.org \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.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;
as well as URLs for NNTP newsgroup(s).