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

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

 



I trust you won't mind if I put this on the public mailing list.  In
general, problems of this sort should be discussed in public.  In
addition to creating a permanent record in the various mailing list
archives, it also gives other people a chance to learn about these
problems and to chime in if they think of something I have overlooked.

On Wed, 20 Feb 2013, Soeren Moch wrote:

> Ok. I use 2 em2840-based usb sticks (em28xx driver) attached to a 
> Marvell Kirkwood-SoC with a orion-ehci usb controller. These usb sticks 
> stream dvb data (digital TV) employing isochronous usb transfers (user 
> application is vdr).
> 
> Starting from linux-3.6 I see
>    ERROR: 1024 KiB atomic DMA coherent pool is too small!
> in the syslog after several 10 minutes (sometimes hours) of streaming 
> and then streaming stops.
> 
> In linux-3.6 the memory management for the arm architecture was changed, 
> so that atomic coherent dma allocations are served from a special pool. 
> This pool gets exhausted. The only user of this pool (in my test) is 
> orion-ehci. Although I have only 10 URBs in flight (5 for each stick, 
> resubmitted in the completion handler), I have 256 atomic coherent 
> allocations (memory from the pool is allocated in pages) from orion-ehci 
> when I see this error. So I think there must be a memory leak (memory 
> allocated atomic somewhere below the usb_submit_urb call in em28xx-core.c).
> 
> With other dvb sticks using usb bulk transfers I never see this error.
> 
> Since you already found a memory leak in the ehci driver for isoc 
> transfers, I hoped you can help to solve this problem. If there are 
> additional questions, please ask. If there is something I can test, I 
> would be glad to do so.

I guess the first thing is to get a dmesg log showing the problem.  You 
should build a kernel with CONFIG_USB_DEBUG enabled and post the part 
of the dmesg output starting from when you plug in the troublesome DVB 
stick.

It also might help to have a record of all the isochronous-related
coherent allocations and deallocations done by the ehci-hcd driver.  
Are you comfortable making your own debugging changes?  The allocations
are done by a call to dma_pool_alloc() in
drivers/usb/host/ehci-sched.c:itd_urb_transaction() if the device runs
at high speed and sitd_urb_transaction() if the device runs at full
speed.  The deallocations are done by calls to dma_pool_free() in
ehci-timer.c:end_free_itds().

Alan Stern

--
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