Am 22.05.2012 15:28, schrieb Pavel Hrdina: > On 05/22/2012 02:01 PM, Kevin Wolf wrote: >> Am 22.05.2012 12:59, schrieb Pavel Hrdina: >>> We have to set up 'media_changed' after guest start so floppy driver >>> could detect that there is no media in drive. For this purpose we call >>> 'fdctrl_change_cb' instead of 'fd_revalidate' in 'fdctrl_connect_drives'. >>> 'fd_revalidate' is called inside 'fdctrl_change_cb'. >>> >>> In 'fdctrl_handle_seek' we always set current track because we don't care >>> if there is media inserted or not. >>> >>> Signed-off-by: Pavel Hrdina<phrd...@redhat.com> >> Can you please add a qtest case that shows the problems that you're >> fixing in this series? > I'm new to qemu. By "add a qtest case" you mean update tests/fdc-test.c ?
Sorry, I should have been more specific. Yes, that's what I mean. >>> diff --git a/hw/fdc.c b/hw/fdc.c >>> index cb4cd25..337b35a 100644 >>> --- a/hw/fdc.c >>> +++ b/hw/fdc.c >>> @@ -1617,11 +1617,7 @@ static void fdctrl_handle_seek(FDCtrl *fdctrl, int >>> direction) >>> /* The seek command just sends step pulses to the drive and doesn't >>> care if >>> * there is a medium inserted of if it's banging the head against the >>> drive. >>> */ >>> - if (fdctrl->fifo[2]> cur_drv->max_track) { >>> - cur_drv->track = cur_drv->max_track; >>> - } else { >>> - cur_drv->track = fdctrl->fifo[2]; >>> - } >>> + cur_drv->track = fdctrl->fifo[2]; >> Why is it okay to have cur_drv->track point outside the floppy? Won't it >> mess up future calculations? Not all other places check it again >> cur_drv->max_track. >> >> Kevin > Well, you are right. Than we have to set 'max_track' even if there is no > media. I tested this on bare-metal without media and where floppy driver > ask to seek to specific track, it ends good and return specific track > position as actual. > I'll rewrite this behavior and send patch v2. You mean max_track = 0 isn't a good value to work with? How can a real drive position the head correctly when it doesn't have a media (and therefore doesn't know its geometry)? But if you have a good default value for max_track that we should use when no medium is present, go ahead. Kevin