From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:56667) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SbwiD-0004ha-6s for qemu-devel@nongnu.org; Tue, 05 Jun 2012 12:34:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Sbwi6-0006LN-Uo for qemu-devel@nongnu.org; Tue, 05 Jun 2012 12:34:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:24784) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Sbwi6-0006L1-Mf for qemu-devel@nongnu.org; Tue, 05 Jun 2012 12:34:22 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q55GYLtT013332 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 5 Jun 2012 12:34:21 -0400 Message-ID: <4FCE3508.8030009@redhat.com> Date: Tue, 05 Jun 2012 18:34:16 +0200 From: Pavel Hrdina MIME-Version: 1.0 References: <095b1f20091f8cf18565a3700372fa65736f0d0a.1338911144.git.phrdina@redhat.com> <4FCE2AC8.9080306@redhat.com> <4FCE2C32.1060309@redhat.com> In-Reply-To: <4FCE2C32.1060309@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2] 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 05:56 PM, Kevin Wolf wrote: > Am 05.06.2012 17:50, schrieb Pavel Hrdina: >> Sorry, I forget the qtest. I'll create it and send it again. >> >> Pavel >> >> On 06/05/2012 05:46 PM, Pavel Hrdina wrote: >>> The Windows uses 'READ' command at the start of an instalation >>> without checking the 'dir' register. We have to abort the transfer >>> with an abnormal termination if there is no media in the drive. >>> >>> We have to also check the 'media_change' bit in the 'fd_seek'. This >>> internal seek clears the 'media_change' bit, too, if there is >>> a media inserted. >>> >>> Signed-off-by: Pavel Hrdina >>> --- >>> hw/fdc.c | 7 ++++++- >>> 1 files changed, 6 insertions(+), 1 deletions(-) >>> >>> diff --git a/hw/fdc.c b/hw/fdc.c >>> index 30d34e3..2d6dd30 100644 >>> --- a/hw/fdc.c >>> +++ b/hw/fdc.c >>> @@ -127,8 +127,13 @@ static int fd_seek(FDrive *drv, uint8_t head, uint8_t track, uint8_t sect, >>> uint32_t sector; >>> int ret; >>> >>> + if (drv->bs != NULL&& bdrv_is_inserted(drv->bs)) { >>> + drv->media_changed = 0; >>> + } >>> + >>> if (track> drv->max_track || >>> - (head != 0&& (drv->flags& FDISK_DBL_SIDES) == 0)) { >>> + (head != 0&& (drv->flags& FDISK_DBL_SIDES) == 0) || >>> + drv->media_changed) { > Why not directly use bdrv_is_inserted() here? > > Fiddling around with media_changed feels rather hacky and is strictly > speaking incorrect because a step pulse is not guaranteed to happen in > the following code. The floppy code doesn't get it quite right today > anyway, but a hack like this would contribute to the problem. > > >>> 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, > Kevin > I'll move the code into the end of 'fd_seek' function, where a step is guaranteed. Internal seek should also reset the 'media_changed' bit if there is a media in the drive. I'll create the qtest tomorrow then I'll send another version of this patch. Pavel