From: "Michael S. Tsirkin" <mst@redhat.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: "Kevin Wolf" <kwolf@redhat.com>,
agraf@suse.de, qemu-devel@nongnu.org,
"Anthony Liguori" <anthony@codemonkey.ws>,
"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH repost] ahci: fix win7 hang on boot
Date: Thu, 31 Oct 2013 13:37:14 +0200 [thread overview]
Message-ID: <20131031113714.GB8976@redhat.com> (raw)
In-Reply-To: <52723FBC.1010803@redhat.com>
On Thu, Oct 31, 2013 at 12:32:12PM +0100, Paolo Bonzini wrote:
> Il 28/10/2013 20:01, Michael S. Tsirkin ha scritto:
> > From: Alexander Graf <agraf@suse.de>
> >
> > When AHCI executes an asynchronous IDE command, it checked DRDY without
> > checking either DRQ or BSY. This sometimes caused interrupt to be sent
> > before command is actually completed.
> >
> > This resulted in a race condition: if guest then managed to access the
> > device before command has completed, it would hang waiting for an
> > interrupt.
> > This was observed with windows 7 guests.
> >
> > To fix, check for DRQ or BSY in additiona to DRDY, if set,
> > the command is asynchronous so delay the interrupt until
> > asynchronous done callback is invoked.
> >
> > Reported-by: Michael S. Tsirkin <mst@redhat.com>
> > Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> > Tested-by: Michael S. Tsirkin <mst@redhat.com>
> > Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> >
> > ---
> > hw/ide/ahci.c | 3 ++-
> > 1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/hw/ide/ahci.c b/hw/ide/ahci.c
> > index a8be62c..fbea9e8 100644
> > --- a/hw/ide/ahci.c
> > +++ b/hw/ide/ahci.c
> > @@ -961,7 +961,8 @@ static int handle_cmd(AHCIState *s, int port, int slot)
> > /* We're ready to process the command in FIS byte 2. */
> > ide_exec_cmd(&s->dev[port].port, cmd_fis[2]);
> >
> > - if (s->dev[port].port.ifs[0].status & READY_STAT) {
> > + if ((s->dev[port].port.ifs[0].status & (READY_STAT|DRQ_STAT|BUSY_STAT)) ==
> > + READY_STAT) {
> > ahci_write_fis_d2h(&s->dev[port], cmd_fis);
> > }
> > }
> >
>
> While the patch fixes the symptom, I think it is only a bandaid.
>
> There is no reason why the async_cmd_done should be restricted to
> asynchronous commands. If synchronous commands are made to go through
> the async_cmd_done callback, you'll automatically get the D2H FIS
> written for all commands.
I suggested this to Kevin offline but he prefers it like this.
> It's good for 1.7, but let's revisit it for 1.8.
>
> Paolo
Fine with me.
prev parent reply other threads:[~2013-10-31 11:34 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-28 19:01 [Qemu-devel] [PATCH repost] ahci: fix win7 hang on boot Michael S. Tsirkin
2013-10-29 11:52 ` Kevin Wolf
2013-10-31 11:32 ` Paolo Bonzini
2013-10-31 11:37 ` Michael S. Tsirkin [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20131031113714.GB8976@redhat.com \
--to=mst@redhat.com \
--cc=afaerber@suse.de \
--cc=agraf@suse.de \
--cc=anthony@codemonkey.ws \
--cc=kwolf@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.