From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56962) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTrZK-0005Ub-Vl for qemu-devel@nongnu.org; Sun, 31 Jul 2016 10:18:19 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bTrZG-0000G6-VF for qemu-devel@nongnu.org; Sun, 31 Jul 2016 10:18:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:36860) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bTrZG-0000G1-PX for qemu-devel@nongnu.org; Sun, 31 Jul 2016 10:18:14 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A982B83F40 for ; Sun, 31 Jul 2016 14:18:13 +0000 (UTC) From: Peter Xu Date: Sun, 31 Jul 2016 22:18:05 +0800 Message-Id: <1469974685-4144-1-git-send-email-peterx@redhat.com> Subject: [Qemu-devel] [PATCH for 2.8?] x86: ioapic: ignore level irq during processing List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: mst@redhat.com, pbonzini@redhat.com, peterx@redhat.com 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 --- 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