qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: qemu-devel@nongnu.org
Cc: mst@redhat.com, pbonzini@redhat.com, peterx@redhat.com
Subject: [Qemu-devel] [PATCH for 2.8?] x86: ioapic: ignore level irq during processing
Date: Sun, 31 Jul 2016 22:18:05 +0800	[thread overview]
Message-ID: <1469974685-4144-1-git-send-email-peterx@redhat.com> (raw)

For level triggered interrupts, we will get Remote IRR bit cleared after
guest kernel finished processing specific request. Before that, we
should ignore the same interrupt from triggering again.

Signed-off-by: Peter Xu <peterx@redhat.com>
---

I discovered this during debugging some IR issues. Only did very
minimum test with e1000, but IIUC this should be the correct behavior
for level triggered interrupts, and before that we might be sending
some extra interrupts to guest (while we should not).

 hw/intc/ioapic.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/hw/intc/ioapic.c b/hw/intc/ioapic.c
index 2d3282a..350f761 100644
--- a/hw/intc/ioapic.c
+++ b/hw/intc/ioapic.c
@@ -129,9 +129,15 @@ static void ioapic_service(IOAPICCommonState *s)
                     }
                     continue;
                 }
-#else
-                (void)coalesce;
 #endif
+
+                if (coalesce) {
+                    /* We are level triggered interrupts, and the
+                     * guest should be still working on previous one,
+                     * so skip it. */
+                    continue;
+                }
+
                 /* No matter whether IR is enabled, we translate
                  * the IOAPIC message into a MSI one, and its
                  * address space will decide whether we need a
-- 
2.7.4

             reply	other threads:[~2016-07-31 14:18 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-31 14:18 Peter Xu [this message]
2016-08-01 10:58 ` [Qemu-devel] [PATCH for 2.8?] x86: ioapic: ignore level irq during processing Paolo Bonzini
2016-08-01 14:02   ` Peter Xu

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=1469974685-4144-1-git-send-email-peterx@redhat.com \
    --to=peterx@redhat.com \
    --cc=mst@redhat.com \
    --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).