From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1M40g7-0003Lq-Vv for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:28 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1M40g2-0003IK-LJ for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:27 -0400 Received: from [199.232.76.173] (port=34148 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1M40g2-0003ID-Fu for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:22 -0400 Received: from mail.windriver.com ([147.11.1.11]:58725 helo=mail.wrs.com) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1M40g1-0004mo-RF for qemu-devel@nongnu.org; Tue, 12 May 2009 18:42:22 -0400 Received: from ALA-MAIL03.corp.ad.wrs.com (ala-mail03 [147.11.57.144]) by mail.wrs.com (8.13.6/8.13.6) with ESMTP id n4CMgJjF010384 for ; Tue, 12 May 2009 15:42:19 -0700 (PDT) From: Jason Wessel Date: Tue, 12 May 2009 17:42:19 -0500 Message-Id: <1242168139-25537-2-git-send-email-jason.wessel@windriver.com> In-Reply-To: <1242168139-25537-1-git-send-email-jason.wessel@windriver.com> References: <1242168139-25537-1-git-send-email-jason.wessel@windriver.com> Subject: [Qemu-devel] [PATCH 2/2] serial: fix lost character after sysrq List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org After creating an automated regression test to test the sysrq responses while running a linux image in qemu, I found that the simulated uart was eating the character right after the sysrq about 75% of the time. The problem is that the qemu sets the LSR_DR (data ready) bit on a serial break. The automated tests can send a break and the sysrq character quickly enough that the qemu serial fifo has a real character available. When there is valid character in the fifo, it gets consumed by the serial driver in the guest OS. The real hardware also appears to set the LSR_DR but always appears to have a null byte in this condition. This patch changes the qemu behavior to match the tested characteristics of a real 16550 chip. Signed-off-by: Jason Wessel --- hw/serial.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) diff --git a/hw/serial.c b/hw/serial.c index ac089fc..113829c 100644 --- a/hw/serial.c +++ b/hw/serial.c @@ -586,6 +586,8 @@ static int serial_can_receive(SerialState *s) static void serial_receive_break(SerialState *s) { s->rbr = 0; + /* When the LSR_DR is set a null byte is pushed into the fifo */ + fifo_put(s, RECV_FIFO, '\0'); s->lsr |= UART_LSR_BI | UART_LSR_DR; serial_update_irq(s); } -- 1.6.3.9.g6345d