From: Jan Kiszka <jan.kiszka@siemens.com>
To: Gerd Hoffmann <kraxel@redhat.com>
Cc: Erik Rull <erik.rull@rdsoftware.de>, qemu-devel <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] usb_packet_complete: Assertion ... failed
Date: Mon, 02 Jul 2012 16:26:20 +0200 [thread overview]
Message-ID: <4FF1AF8C.5030400@siemens.com> (raw)
In-Reply-To: <4FF18080.7010305@redhat.com>
On 2012-07-02 13:05, Gerd Hoffmann wrote:
> Hi,
>
>> What I also so in the trace is that the USB core apparently stumbled as
>> a request that took very long too complete finally returned, and then
>> the assertion triggered over this request.
>
> Can I get such a trace please? usb_host_req_* and usb_host_urb_*
> enabled should show all interesting information. Oh, and replacing the
> assert which triggers with a tracepoint (or just a fprintf in case you
> use the stderr tracer) would be nice, so I can see how qemu continues
> after the assert().
>
> A request taking a while shouldn't be a issue. Requests for a specific
> endpoint shouldn't be reordered though, and this seems to happen here.
You can find a log at
http://www.kiszka.org/downloads/usb-log.xz
I instrumented the assert as follows:
diff --git a/hw/usb/core.c b/hw/usb/core.c
index 0e02da7..eacda74 100644
--- a/hw/usb/core.c
+++ b/hw/usb/core.c
@@ -407,7 +407,9 @@ void usb_packet_complete(USBDevice *dev, USBPacket *p)
int ret;
usb_packet_check_state(p, USB_PACKET_ASYNC);
- assert(QTAILQ_FIRST(&ep->queue) == p);
+ if (QTAILQ_FIRST(&ep->queue) != p) {
+ trace_usb_assert(usb_bus_from_device(dev)->busnr, dev->port->path, p->ep->nr, p);
+ }
usb_packet_set_state(p, USB_PACKET_COMPLETE);
QTAILQ_REMOVE(&ep->queue, p, queue);
dev->port->ops->complete(dev->port, p);
diff --git a/trace-events b/trace-events
index c935ba2..a953898 100644
--- a/trace-events
+++ b/trace-events
@@ -230,6 +230,7 @@ sun4m_iommu_bad_addr(uint64_t addr) "bad addr %"PRIx64
# hw/usb/core.c
usb_packet_state_change(int bus, const char *port, int ep, void *p, const char *o, const char *n) "bus %d, port %s, ep %d, packet %p, state %s -> %s"
usb_packet_state_fault(int bus, const char *port, int ep, void *p, const char *o, const char *n) "bus %d, port %s, ep %d, packet %p, state %s, expected %s"
+usb_assert(int bus, const char *port, int ep, void *p) "bus %d, port %s, ep %d, packet %p"
# hw/usb/bus.c
usb_port_claim(int bus, const char *port) "bus %d, port %s"
There is a single occurrence of this event in the log.
Thanks,
Jan
--
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux
next prev parent reply other threads:[~2012-07-02 14:26 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-06-22 15:54 [Qemu-devel] usb_packet_complete: Assertion ... failed Jan Kiszka
2012-06-23 9:29 ` Erik Rull
2012-06-23 9:41 ` Jan Kiszka
[not found] ` <4FEB65E5.1060908@rdsoftware.de>
[not found] ` <4FEC5D1B.6040307@siemens.com>
[not found] ` <4FEC7060.2010304@siemens.com>
2012-07-02 11:05 ` Gerd Hoffmann
2012-07-02 14:26 ` Jan Kiszka [this message]
2012-07-02 15:47 ` Gerd Hoffmann
2012-07-02 15:59 ` Gerd Hoffmann
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=4FF1AF8C.5030400@siemens.com \
--to=jan.kiszka@siemens.com \
--cc=erik.rull@rdsoftware.de \
--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.