usb: ehci: poll_int_queue check real qtd, not the overlay
authorHans de Goede <hdegoede@redhat.com>
Sat, 20 Sep 2014 14:51:24 +0000 (16:51 +0200)
committerMarek Vasut <marex@denx.de>
Mon, 6 Oct 2014 12:50:42 +0000 (14:50 +0200)
commit415548d88446134549917aae026f53dbbee36fd2
treed9d6cc62cd25aca896ea106992565a4e6d2d5459
parentea7b30c58973d59396c71d5880a652639d479a68
usb: ehci: poll_int_queue check real qtd, not the overlay

When we first start an int queue, the qh's overlay area is all zeros. This
gets filled by the hc with the actual qtd values as soon as it advances
the queue, but we may call poll_int_queue before then, in which case we
would think the transfer has completed as the hc has not yet copied the
qt_token to the overlay, so the active flag is not set.

This fixes this by checking the actual qtd token, rather then the overlay.
This also fixes a (theoretical) race where we see the completion in the
overlay and free and re-use the qtd before the hc has completed writing back
the overlay to the actual qtd.

Signed-off-by: Hans de Goede <hdegoede@redhat.com>
drivers/usb/host/ehci-hcd.c