From: Hans de Goede <hdegoede@redhat.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: Hans de Goede <hdegoede@redhat.com>, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 01/26] ehci: Add a ehci_writeback_async_complete_packet helper function
Date: Fri, 14 Dec 2012 14:35:22 +0100 [thread overview]
Message-ID: <1355492147-5023-2-git-send-email-hdegoede@redhat.com> (raw)
In-Reply-To: <1355492147-5023-1-git-send-email-hdegoede@redhat.com>
Also drop the warning printf, which was there mainly because this was an
untested code path (as the previous bug fixes to it show), but that no
longer is the case now :)
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
hw/usb/hcd-ehci.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/hw/usb/hcd-ehci.c b/hw/usb/hcd-ehci.c
index 7536837..218b1d7 100644
--- a/hw/usb/hcd-ehci.c
+++ b/hw/usb/hcd-ehci.c
@@ -438,6 +438,22 @@ static inline bool ehci_periodic_enabled(EHCIState *s)
return ehci_enabled(s) && (s->usbcmd & USBCMD_PSE);
}
+/* Finish executing and writeback a packet outside of the regular
+ fetchqh -> fetchqtd -> execute -> writeback cycle */
+static void ehci_writeback_async_complete_packet(EHCIPacket *p)
+{
+ EHCIQueue *q = p->queue;
+ int state;
+
+ state = ehci_get_state(q->ehci, q->async);
+ ehci_state_executing(q);
+ ehci_state_writeback(q); /* Frees the packet! */
+ if (!(q->qh.token & QTD_TOKEN_HALT)) {
+ ehci_state_advqueue(q);
+ }
+ ehci_set_state(q->ehci, q->async, state);
+}
+
/* packet management */
static EHCIPacket *ehci_alloc_packet(EHCIQueue *q)
@@ -455,17 +471,7 @@ static EHCIPacket *ehci_alloc_packet(EHCIQueue *q)
static void ehci_free_packet(EHCIPacket *p)
{
if (p->async == EHCI_ASYNC_FINISHED) {
- EHCIQueue *q = p->queue;
- int state = ehci_get_state(q->ehci, q->async);
- /* This is a normal, but rare condition (cancel racing completion) */
- fprintf(stderr, "EHCI: Warning packet completed but not processed\n");
- ehci_state_executing(q);
- ehci_state_writeback(q);
- if (!(q->qh.token & QTD_TOKEN_HALT)) {
- ehci_state_advqueue(q);
- }
- ehci_set_state(q->ehci, q->async, state);
- /* state_writeback recurses into us with async == EHCI_ASYNC_NONE!! */
+ ehci_writeback_async_complete_packet(p);
return;
}
trace_usb_ehci_packet_action(p->queue, p, "free");
--
1.8.0.1
next prev parent reply other threads:[~2012-12-14 13:33 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-12-14 13:35 [Qemu-devel] [PATCH 00/26] usb: Hans' pending qemu usb patches Hans de Goede
2012-12-14 13:35 ` Hans de Goede [this message]
2012-12-14 13:35 ` [Qemu-devel] [PATCH 02/26] ehci: Add ehci_verify_qh and ehci_verify_qtd helper functions Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 03/26] ehci: Verify guest does not change the token of inflight qtd-s Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 04/26] ehci: Move get / put_dwords upwards Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 05/26] ehci: writeback_async_complete_packet: verify qh and qtd Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 06/26] ehci: Verify qtd for async completed packets Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 07/26] ehci: Add an ehci_get_pid helper function Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 08/26] ehci: Verify a queue's ep direction does not change Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 09/26] ehci: Use uframe precision for interrupt threshold checking Hans de Goede
2012-12-17 13:16 ` Gerd Hoffmann
2012-12-17 14:23 ` Hans de Goede
2012-12-17 14:39 ` Gerd Hoffmann
2012-12-17 14:47 ` Hans de Goede
2012-12-17 14:51 ` Gerd Hoffmann
2012-12-18 10:20 ` Hans de Goede
2012-12-18 11:03 ` Gerd Hoffmann
2012-12-18 11:30 ` Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 10/26] ehci: Further speedup rescanning if async schedule after raising an interrupt Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 11/26] ehci: Don't call commit_irq after raising PCD Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 12/26] uhci: Fix 1 ms delay in interrupt reporting to the guest Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 13/26] uhci: Fix pending interrupts getting lost on migration Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 14/26] uhci: Add a QH_VALID define Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 15/26] uhci: Limit amount of frames processed in one go Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 16/26] uhci: Maximize how many frames we catch up when behind Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 17/26] hid: Change idle handling to use a timer Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 18/26] usb: Fix usb_ep_find_packet_by_id Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 19/26] usb: Add an usb_device_ep_stopped USBDevice method Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 20/26] usbredir: Add an usbredir_stop_ep helper function Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 21/26] usbredir: Add USBEP2I and I2USBEP helper macros Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 22/26] usbredir: Add ep_stopped USBDevice method Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 23/26] usbredir: Verify we have 32 bits bulk length cap when redirecting to xhci Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 24/26] usbredir: Add usbredir_init_endpoints() helper Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 25/26] usb-redir: Add debugging to bufpq save / restore Hans de Goede
2012-12-14 13:35 ` [Qemu-devel] [PATCH 26/26] usbredir: Add support for buffered bulk input Hans de Goede
2012-12-18 13:36 ` Gerd Hoffmann
2012-12-19 9:27 ` Hans de Goede
2012-12-19 9:51 ` Gerd Hoffmann
2012-12-19 11:48 ` Hans de Goede
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=1355492147-5023-2-git-send-email-hdegoede@redhat.com \
--to=hdegoede@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).