From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from [140.186.70.92] (port=48062 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Pi4Ww-0005R8-Ls for qemu-devel@nongnu.org; Wed, 26 Jan 2011 07:31:23 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Pi4Wv-00064e-4Z for qemu-devel@nongnu.org; Wed, 26 Jan 2011 07:31:22 -0500 Received: from mtagate1.uk.ibm.com ([194.196.100.161]:51968) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Pi4Wu-00063b-Pf for qemu-devel@nongnu.org; Wed, 26 Jan 2011 07:31:21 -0500 Received: from d06nrmr1806.portsmouth.uk.ibm.com (d06nrmr1806.portsmouth.uk.ibm.com [9.149.39.193]) by mtagate1.uk.ibm.com (8.13.1/8.13.1) with ESMTP id p0QCVILH001488 for ; Wed, 26 Jan 2011 12:31:18 GMT Received: from d06av09.portsmouth.uk.ibm.com (d06av09.portsmouth.uk.ibm.com [9.149.37.250]) by d06nrmr1806.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p0QCVKxs1511480 for ; Wed, 26 Jan 2011 12:31:20 GMT Received: from d06av09.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av09.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p0QCVG4D013598 for ; Wed, 26 Jan 2011 05:31:17 -0700 From: Stefan Hajnoczi Date: Wed, 26 Jan 2011 12:31:00 +0000 Message-Id: <1296045060-27382-1-git-send-email-stefanha@linux.vnet.ibm.com> Subject: [Qemu-devel] [PATCH] lsi53c895a: Update dnad when skipping MSGOUT bytes List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Paul Brook , "Nicholas A. Bellinger" , Stefan Hajnoczi Update not only dbc but also dnad when skipping bytes during the MSGOUT phase. Previously only dbc was updated which is probably wrong and could lead to bogus message codes being read. Tested on Linux and Windows Server 2003. Signed-off-by: Stefan Hajnoczi --- hw/lsi53c895a.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/hw/lsi53c895a.c b/hw/lsi53c895a.c index 9c761cd..84a4992 100644 --- a/hw/lsi53c895a.c +++ b/hw/lsi53c895a.c @@ -842,6 +842,13 @@ static uint8_t lsi_get_msgbyte(LSIState *s) return data; } +/* Skip the next n bytes during a MSGOUT phase. */ +static void lsi_skip_msgbytes(LSIState *s, unsigned int n) +{ + s->dnad += n; + s->dbc -= n; +} + static void lsi_do_msgout(LSIState *s) { uint8_t msg; @@ -869,11 +876,11 @@ static void lsi_do_msgout(LSIState *s) switch (msg) { case 1: DPRINTF("SDTR (ignored)\n"); - s->dbc -= 2; + lsi_skip_msgbytes(s, 2); break; case 3: DPRINTF("WDTR (ignored)\n"); - s->dbc -= 1; + lsi_skip_msgbytes(s, 1); break; default: goto bad; -- 1.7.2.3