From: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] xhci: flush dequeue pointer to endpoint context
Date: Fri, 31 Mar 2017 11:39:11 +0100 [thread overview]
Message-ID: <20170331103911.GB4514@work-vm> (raw)
In-Reply-To: <20170331102521.29253-1-kraxel@redhat.com>
* Gerd Hoffmann (kraxel@redhat.com) wrote:
> When done processing a endpoint ring we must update the dequeue pointer
> in the endpoint context in guest memory. This is needed to make sure
> the guest has a correct view of things and also to make live migration
> work properly, because xhci post_load restores alot of the state from
> xhci data structures in guest memory.
>
> Add xhci_set_ep_state() call to do that.
>
> The recursive calls stopped by commit
> ddb603ab6c981c1d67cb42266fc700c33e5b2d8f had the (unintentional) side
> effect to hiding this bug. xhci_set_ep_state() was called before
> processing, to set the state to running, which updated the dequeue
> pointer too.
>
> Reported-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Tested-by: Dr. David Alan Gilbert <dgilbert@redhat.com>
Thanks, that passes the basic test reported in the bz; boot the VM,
lsblk, migrate, fdisk -l
Dave
> ---
> hw/usb/hcd-xhci.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/hw/usb/hcd-xhci.c b/hw/usb/hcd-xhci.c
> index 8958f95..a6929e5 100644
> --- a/hw/usb/hcd-xhci.c
> +++ b/hw/usb/hcd-xhci.c
> @@ -2063,7 +2063,7 @@ static void xhci_kick_ep(XHCIState *xhci, unsigned int slotid,
> static void xhci_kick_epctx(XHCIEPContext *epctx, unsigned int streamid)
> {
> XHCIState *xhci = epctx->xhci;
> - XHCIStreamContext *stctx;
> + XHCIStreamContext *stctx = NULL;
> XHCITransfer *xfer;
> XHCIRing *ring;
> USBEndpoint *ep = NULL;
> @@ -2192,6 +2192,8 @@ static void xhci_kick_epctx(XHCIEPContext *epctx, unsigned int streamid)
> break;
> }
> }
> + /* update ring dequeue ptr */
> + xhci_set_ep_state(xhci, epctx, stctx, epctx->state);
> epctx->kick_active--;
>
> ep = xhci_epid_to_usbep(epctx);
> --
> 2.9.3
>
--
Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
prev parent reply other threads:[~2017-03-31 10:39 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-03-31 10:25 [Qemu-devel] [PATCH] xhci: flush dequeue pointer to endpoint context Gerd Hoffmann
2017-03-31 10:39 ` Dr. David Alan Gilbert [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=20170331103911.GB4514@work-vm \
--to=dgilbert@redhat.com \
--cc=kraxel@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.