From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:41127) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tck8N-0005uA-UX for qemu-devel@nongnu.org; Sun, 25 Nov 2012 16:53:04 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Tck8M-000125-3y for qemu-devel@nongnu.org; Sun, 25 Nov 2012 16:53:03 -0500 Received: from qmta03.emeryville.ca.mail.comcast.net ([76.96.30.32]:50093) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Tck8L-00011r-Tv for qemu-devel@nongnu.org; Sun, 25 Nov 2012 16:53:02 -0500 From: Matthew Ogilvie Date: Sun, 25 Nov 2012 14:51:43 -0700 Message-Id: <1353880306-8004-8-git-send-email-mmogilvi_qemu@miniinfo.net> In-Reply-To: <1353880306-8004-1-git-send-email-mmogilvi_qemu@miniinfo.net> References: <1353880306-8004-1-git-send-email-mmogilvi_qemu@miniinfo.net> Subject: [Qemu-devel] [PATCH v7 07/10] i8254/i8259: workaround to make IRQ0 work like before List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Jan Kiszka , Matthew Ogilvie , "Maciej W. Rozycki" , Avi Kivity Someday it should be fixed properly, but doing so may break migration. So go with an incremental approach instead. Signed-off-by: Matthew Ogilvie --- hw/i8259.c | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/hw/i8259.c b/hw/i8259.c index 9b2ec40..71cc09a 100644 --- a/hw/i8259.c +++ b/hw/i8259.c @@ -150,8 +150,25 @@ static void pic_set_irq(void *opaque, int irq, int level) /* Dropping level clears the interrupt regardless of edge trigger * vs level trigger. */ - s->irr &= ~mask; s->last_irr &= ~mask; + + /* Migration compatibility hack: + * + * The i8254 timer model is wrong in a number of ways, + * including lowering IRQ0 much earlier than it should. + * + * FIXME i8254_timing_fixes: Eventually the i8254 + * should be fixed, but it isn't + * trivial to do so in a way that avoids possible problems with + * migration (lost or gained timer ticks). So for now, make the + * i8254 work the same way that it worked in qemu 1.2, and + * leave irr for IRQ0 alone in the i8259 here: + */ + if (irq == 0 && s->master) { + mask = 0; + } + + s->irr &= ~mask; } pic_update_irq(s); } -- 1.7.10.2.484.gcd07cc5