From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:46192) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sbuml-0004Dp-AS for qemu-devel@nongnu.org; Tue, 05 Jun 2012 10:31:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sbumb-0001Fe-C2 for qemu-devel@nongnu.org; Tue, 05 Jun 2012 10:31:02 -0400 Received: from mx1.redhat.com ([209.132.183.28]:34989) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sbumb-0001FS-3H for qemu-devel@nongnu.org; Tue, 05 Jun 2012 10:30:53 -0400 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q55EUpLU013647 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 5 Jun 2012 10:30:51 -0400 Message-ID: <4FCE1819.9000802@redhat.com> Date: Tue, 05 Jun 2012 16:30:49 +0200 From: Pavel Hrdina MIME-Version: 1.0 References: <9349989e1c2f12d5d6bc00089efdb7947fdf8dac.1338903679.git.phrdina@redhat.com> <4FCE116C.4050008@redhat.com> In-Reply-To: <4FCE116C.4050008@redhat.com> Content-Type: text/plain; charset=ISO-8859-15; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] fdc: fix media change detection for windows List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Kevin Wolf Cc: mtosatti@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com On 06/05/2012 04:02 PM, Kevin Wolf wrote: > Am 05.06.2012 15:48, schrieb Pavel Hrdina: >> The windows uses 'READ' command at the start of instalation. We have to >> also check the 'media_change' bit in the 'fd_seek'. >> >> Signed-off-by: Pavel Hrdina > Can you explain the scenario in more detail? What is Windows trying and > why should it fail? What is happening today? > Windows sends these command at the start of installation in this order: RECALIBRATE, SENSE INTERRUPT STATUS, READ. Windows completely ignores the 'dir' register and reads data from no media and then stuck. This happens if you start windows installation with floppy drive without media. >> --- >> hw/fdc.c | 3 ++- >> 1 files changed, 2 insertions(+), 1 deletions(-) >> >> diff --git a/hw/fdc.c b/hw/fdc.c >> index 30d34e3..70b0c00 100644 >> --- a/hw/fdc.c >> +++ b/hw/fdc.c >> @@ -128,7 +128,8 @@ static int fd_seek(FDrive *drv, uint8_t head, uint8_t track, uint8_t sect, >> int ret; >> >> if (track> drv->max_track || >> - (head != 0&& (drv->flags& FDISK_DBL_SIDES) == 0)) { >> + (head != 0&& (drv->flags& FDISK_DBL_SIDES) == 0) || >> + drv->media_changed) { >> FLOPPY_DPRINTF("try to read %d %02x %02x (max=%d %d %02x %02x)\n", >> head, track, sect, 1, >> (drv->flags& FDISK_DBL_SIDES) == 0 ? 0 : 1, > > Context: Next thing in the code is an error return. > > This looks wrong to me. drv->media_changed is also true when a new > floppy has been inserted, but there was no step pulse yet. Is there any > reason why an fd_seek() should fail when a floppy is present? > > Last, but not least: Any floppy fixes should come with qtest cases. > > Kevin Well, you're right. I should change the code a little bit. Pavel