Thread (25 messages) 25 messages, 6 authors, 2013-03-22

[PATCH] USB: EHCI: fix for leaking isochronous data

From: Soeren Moch <hidden>
Date: 2013-03-21 21:45:44
Also in: linux-mm, lkml

On 03/21/13 22:12, Alan Stern wrote:
On Thu, 21 Mar 2013, Alan Stern wrote:
quoted
On Thu, 21 Mar 2013, Soeren Moch wrote:
quoted
Now I found out what is going on here:

In itd_urb_transaction() we allocate 9 iTDs for each URB with
number_of_packets == 64 in my case. The iTDs are added to
sched->td_list. For a frame-aligned scheduling we need 8 iTDs, the 9th
one is released back to the front of the streams free_list in
iso_sched_free(). This iTD was cleared after allocation and has a frame
number of 0 now. So for each allocation when now_frame == 0 we allocate
from the dma_pool, not from the free_list.
Okay, that is a problem.  But it shouldn't be such a big problem,
because now_frame should not be equal to 0 very often.
Oh, wait, now I get it.  We never reach a steady state, because the
free list never shrinks, but occasionally it does increase when
now_frame is equal to 0.  Even though that doesn't happen very often,
the effects add up.
Correct. Approximately twice a second we allocate 9 iTDs from the 
dma_pool in my case (the frame numbers run from 0 to 511 - not up to 
2047, which I thought they should). But since we allocate iTDs every 8 
frames in my case (for each active stream), the pool allocations occur 
only when we hit the allocation sequence frame 0,8,16,... (not one of 
the other 7 opportunities frame 1,9,17,... - frame 7,15,23,...)
Very good; tomorrow I will send your patch in.

Alan Stern
Thank you. And also thanks to all who helped to track down this issue.

  Soeren
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help