From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:34458) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XykOe-0007kI-SE for qemu-devel@nongnu.org; Wed, 10 Dec 2014 11:45:57 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XykOZ-0006Iy-GJ for qemu-devel@nongnu.org; Wed, 10 Dec 2014 11:45:52 -0500 Received: from mx1.redhat.com ([209.132.183.28]:39429) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XykOZ-0006Io-86 for qemu-devel@nongnu.org; Wed, 10 Dec 2014 11:45:47 -0500 Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id sBAGjgee019768 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Wed, 10 Dec 2014 11:45:46 -0500 From: Paolo Bonzini Date: Wed, 10 Dec 2014 17:34:40 +0100 Message-Id: <1418229280-30380-1-git-send-email-pbonzini@redhat.com> Subject: [Qemu-devel] [PATCH] serial: do not trigger THR interrupt after writing to IER List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: imammedo@redhat.com This is responsible for failure of migration from 2.2 to 2.1, because thr_ipending is always one in practice. Calling serial_update_irq is the right thing to do indeed, because writing to IER could cause an interrupt to appear. However, there is no reason to set thr_ipending again. This was already reported in 2010. See this quote from https://lists.gnu.org/archive/html/qemu-devel/2010-03/msg01914.html: > The commit in r1049 (serial interrupt fix (Hampa Hug)) prevents > booting Digital Research DOSPlus. Following patch partially reverts > that commit and makes DOSPlus booting in QEMU again. Bochs does not check LSR_THRE in IER, and the log message in r1049 doesn't explain why the change was made in the first place. This does not change the migration format, so 2.2.0 -> 2.1 will remain broken but we can fix 2.2.1 -> 2.1 without breaking 2.2.1 <-> 2.2.0. Signed-off-by: Paolo Bonzini --- hw/char/serial.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/hw/char/serial.c b/hw/char/serial.c index ebcacdc..cf8e4e3 100644 --- a/hw/char/serial.c +++ b/hw/char/serial.c @@ -350,10 +350,7 @@ static void serial_ioport_write(void *opaque, hwaddr addr, uint64_t val, s->poll_msl = 0; } } - if (s->lsr & UART_LSR_THRE) { - s->thr_ipending = 1; - serial_update_irq(s); - } + serial_update_irq(s); } break; case 2: -- 2.1.0