USB: EHCI: defer reclamation of siTDs
This patch (as1369) fixes a problem in ehci-hcd. Some controllers occasionally run into trouble when the driver reclaims siTDs too quickly. This can happen while streaming audio; it causes the controller to crash. The patch changes siTD reclamation to work the same way as iTD reclamation: Completed siTDs are stored on a list and not reused until at least one frame has passed. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Tested-by: Nate Case <ncase@xes-inc.com> CC: <stable@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
5f677f1d45
commit
0e5f231bc1
@@ -87,8 +87,9 @@ struct ehci_hcd { /* one per controller */
|
||||
int next_uframe; /* scan periodic, start here */
|
||||
unsigned periodic_sched; /* periodic activity count */
|
||||
|
||||
/* list of itds completed while clock_frame was still active */
|
||||
/* list of itds & sitds completed while clock_frame was still active */
|
||||
struct list_head cached_itd_list;
|
||||
struct list_head cached_sitd_list;
|
||||
unsigned clock_frame;
|
||||
|
||||
/* per root hub port */
|
||||
@@ -195,7 +196,7 @@ timer_action_done (struct ehci_hcd *ehci, enum ehci_timer_action action)
|
||||
clear_bit (action, &ehci->actions);
|
||||
}
|
||||
|
||||
static void free_cached_itd_list(struct ehci_hcd *ehci);
|
||||
static void free_cached_lists(struct ehci_hcd *ehci);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
|
Reference in New Issue
Block a user