Re: [PATCH 2/2] usb-anchor: Delay usb_wait_anchor_empty_timeout wake up till completion is done

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2013-10-09 at 17:01 +0200, Hans de Goede wrote:
> usb_wait_anchor_empty_timeout() should wait till the completion handler
> has run. Both the zd1211rw driver and the uas driver (in its task mgmt) depend
> on the completion handler having completed when usb_wait_anchor_empty_timeout()
> returns, as they read state set by the completion handler after an
> usb_wait_anchor_empty_timeout() call.
> 
> But __usb_hcd_giveback_urb() calls usb_unanchor_urb before calling the
> completion handler. This is necessary as the completion handler may
> re-submit and re-anchor the urb. But this introduces a race where the state
> these drivers want to read has not been set yet by the completion handler
> (this race is easily triggered with the uas task mgmt code).
> 
> I've considered adding an anchor_count to struct urb, which would be
> incremented on anchor and decremented on unanchor, and then only actually
> do the anchor / unanchor on 0 -> 1 and 1 -> 0 transtions, combined with
> moving the unanchor call in hcd_giveback_urb to after calling the completion
> handler. But this will only work if urb's are only re-anchored to the same
> anchor as they were anchored to before the completion handler ran.
> 
> And at least one driver re-anchors to another anchor from the completion
> handler (rtlwifi).
> 
> So I have come up with this patch instead, which adds the ability to
> suspend wakeups of usb_wait_anchor_empty_timeout() waiters to the usb_anchor
> functionality, and uses this in __usb_hcd_giveback_urb() to delay wake-ups
> until the completion handler has run.
> 
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
Acked-by: Oliver Neukum <oliver@xxxxxxxxxx>

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux