qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.com>
To: Johannes Stezenbach <js@sig21.net>
Cc: Shawn Starr <shawn.starr@rogers.com>,
	qemu-devel@nongnu.org, gerd@kraxel.org
Subject: Re: [Qemu-devel] EHCI USB regression in 1.2.0 - ehci_state_fetchqtd() asserting
Date: Mon, 08 Oct 2012 17:03:24 +0200	[thread overview]
Message-ID: <5072EB3C.70004@redhat.com> (raw)
In-Reply-To: <20121008144909.GA31171@sig21.net>

Hi,

On 10/08/2012 04:49 PM, Johannes Stezenbach wrote:
> Hi,
>
> On Mon, Oct 08, 2012 at 03:51:08PM +0200, Hans de Goede wrote:
>> On 10/08/2012 03:01 PM, Johannes Stezenbach wrote:
>>>
>>> There will always be a race between the call to USBDEVFS_DISCARDURB
>>> and the URB completing.  IMHO the handling in usb_host_stop_n_free_iso()
>>> is buggy.  How about dropping the "killed" and "free" variables and
>>> calling async_complete() and g_free() unconditionally?
>>
>> This race is well known already handled correctly,
>
> You mean the message about "leaking iso urbs" is wrong?
> (since it will be freed later in async_completem right?)
>

Hmm, ah this is about iso urbs, not about regular async urbs. Sorry, then I'm
not sure if the code is correct. I'm not that familiar with the host-linux
code, as I work on and use the usb-redir code mostly.

>> the real problem is the
>> "ehci warning: guest updated active QH" message, which most likely indicates
>> that the guest has hit the doorbell (IAAD) in the EHCI controller, and then
>> has not gotten an IAA interrupt within
>> a certain amount of time triggering its IAAD watchdog (some real EHCI
>> hardware is broken wrt delivering IAA interrupt) causing us to not see
>> an unlinked qh as unlinked, and then later on triggering the
>> "warning: guest updated active QH" message.
>>
>> This is unavoidable when we get too large latencies, the ehci hardware
>> simple was not designed to be virtualized, anything but actually.
>
> OK, thanks for this explanation.
> I haven't much clue about qemu but isn't the issue that qemu
> delivers timer irqs to the guest (for EHCI_HRTIMER_IAA_WATCHDOG) while
> failing to handle the IAAD -> IAA interrupt generation?
> (via qemu_bh_schedule -> ehci_advance_async_state -> ehci_raise_irq,
> why does ehci_raise_irq() not call ehci_update_irq() for USBSTS_IAA?)

We need to throttle the interrupt generation inside ehci both per
the spec, and because otherwise we may trigger:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=commitdiff;h=361aabf395e4a23cf554cf4ec0c0c6963b8beb01

Which is present in all but the very latest linux kernels.

> If that cannot be fixed, have you tried talking to the Linux
> EHCI driver maintainer if the EHCI_HRTIMER_IAA_WATCHDOG
> timeout (10ms) can be increased or skipped entirely for non-broken hw?
> (Linux commit 26f953fd884ea4879 suggests it's only for VIA chips)

AFAIK Shawn is using a windows guest, so the fact that he is seeing
the "ehci warning: guest updated active QH" warning, suggests that
windows is using a watchdog too, also the messages about cancelling
the isoc stream suggest that windows is actively stopping the stream
from the webcam, at which point there is little the redir code
can do to recover. This could be caused by timeouts caused by the
latency spikes from the debug kernel...

We do our best to make the whole usb-redir code and ehci emulation as
proof as possible against latency spikes, and some of the patches
from my latest patchset may help there, but in the end, esp. for
isoc devices, the code will always be sensitive to too large latencies.

Regards,

Hans

  reply	other threads:[~2012-10-08 15:02 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-09-19 16:42 [Qemu-devel] EHCI USB regression in 1.2.0 - ehci_state_fetchqtd() asserting Shawn Starr
2012-09-19 16:53 ` Shawn Starr
2012-09-20 15:37 ` Hans de Goede
2012-09-20 19:08   ` Shawn Starr
2012-09-20 23:28   ` Shawn Starr
     [not found]   ` <6177450.mT8I4ey0nz@segfault.sh0n.net>
2012-09-21  0:04     ` Shawn Starr
2012-09-21 12:19       ` Hans de Goede
2012-09-21 15:39         ` Shawn Starr
2012-09-21 17:35           ` Hans de Goede
2012-09-21 18:46             ` Shawn Starr
2012-09-23 10:03               ` Hans de Goede
2012-09-23 18:00                 ` Shawn Starr
2012-09-23 18:20                   ` Shawn Starr
2012-09-23 18:52                     ` Shawn Starr
2012-09-24  9:52                       ` Hans de Goede
2012-09-24 14:24                         ` Shawn Starr
2012-09-24  9:50                     ` Hans de Goede
2012-09-24 14:20                       ` Shawn Starr
2012-09-24 14:36                         ` Hans de Goede
2012-09-24 14:38                           ` Shawn Starr
2012-10-02 15:26                             ` Shawn Starr
2012-10-08 11:27                               ` Hans de Goede
2012-10-08 13:01                                 ` Johannes Stezenbach
2012-10-08 13:51                                   ` Hans de Goede
2012-10-08 14:49                                     ` Johannes Stezenbach
2012-10-08 15:03                                       ` Hans de Goede [this message]
2012-10-08 16:11                                         ` Johannes Stezenbach
2012-10-08 20:10                                           ` Hans de Goede
2012-10-08 20:18                                             ` Shawn Starr
2012-10-08 21:32                                               ` Hans de Goede
2012-10-08 21:37                                                 ` Shawn Starr

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=5072EB3C.70004@redhat.com \
    --to=hdegoede@redhat.com \
    --cc=gerd@kraxel.org \
    --cc=js@sig21.net \
    --cc=qemu-devel@nongnu.org \
    --cc=shawn.starr@rogers.com \
    /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).