Skip to content
  • Hans de Goede's avatar
    ehci: Schedule async-bh when IAAD bit gets set · a1c3e4b8
    Hans de Goede authored
    
    
    After the "ehci: Print a warning when a queue unexpectedly contains packets
    on cancel" commit. Under certain reproducable conditions I was getting the
    following message: "EHCI: Warning queue not empty on queue reset".
    
    After aprox. 8 hours of debugging I've finally found the cause. The Linux EHCI
    driver has an IAAD watchdog, to work around certain EHCI hardware sometimes
    not acknowledging the doorbell at all. This watchdog has a timeout of 10 ms,
    which is less then the time between 2 runs through the async schedule when
    async_stepdown is at its highest value.
    
    Thus the watchdog can trigger, after which Linux clears the IAAD bit and
    re-uses the QH. IOW we were not properly detecting the unlink of the qh, due
    to us missing (ignoring for more then 10 ms) the IAAD command, which triggered
    the warning.
    
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    a1c3e4b8