回复: soc camera driver module may case memory leak

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

 



Dear Guennadi

I'm sure it's a bug.In linux-2.6.x, we call open() will allocate a struct soc_camera_file which contains struct videobuf_queue;then usr will call request_buffer, soc_camera module will call videobuf_alloc_vb(q) which will be installed in q->bufs[i].
             My question is how to free q->bufs[i] which is allocated from vb = kzalloc(size + sizeof(*mem), GFP_KERNEL) if we use videobuf-dma-contig memory model? 
             videobuf_mmap_free()->kfree(q->bufs[i]) should call at every call close();we can't call kfree(q->bufs[i]) at q->ops->buf_release which is called in stream_off(), because q->bufs[i] reserve struct videobuf_mapping, unmap() will can't free videobuf which is used to store video data. Also can't call videobuf_mmap_free()->kfree(q->bufs[i]) at last close(), because in linux-2.6.x once open() allocates a videobuf_queue.
               In linux-3.x.x, we should call videobuf_mmap_free()->kfree(q->bufs[i]) only once at module remove callbcak function.
              You say, videobuf mmap allocations will be freed automatically. I want to known soc_camera module how to free q->bufs[i] automatically. 
              If is there no bug in soc camera module , i'm sure all device driver use soc camera module have bugs, such as sh_mobile_ceu_caera.c, mx1_caera.c, mx3_caera.c etc. all of them donn't call videobuf_mmap_free()->kfree(q->bufs[i]).

Your reply will be higly appreciated! 


------------------ 原始邮件 ------------------
发件人: "Guennadi Liakhovetski"<g.liakhovetski@xxxxxx>;
发送时间: 2012年11月6日(星期二) 晚上7:30
收件人: "再回首"<308123027@xxxxxx>; 
抄送: "linux-media"<linux-media@xxxxxxxxxxxxxxx>; 
主题: Re: soc camera driver module may case memory leak


Hi

On Mon, 5 Nov 2012,  ~F~M ~[~^ ~V wrote:

> Dear sir:
> why not call "videobuf_mmap_free",when device close call "soc_camera_close" in linux-2.6.x;

I haven't found any version, where this has been done. I don't think this 
is needed, because videobuf mmap allocations will be freed automatically 
upon the last close(). Please, dismiss your bugzilla entry.

Thanks
Guennadi

> do the same in linux-3.x.x?
> video capture flow:
> 1)open
> 2)set fmt
> 3)request buffer-->__videobuf_mmap_setup-->videobuf_alloc_vb(q)
> 4)mmap
> 5)enqueue, dequeue
> 6)unmap
> 7)close--->soc_camera_close-->?should call:videobuf_mmap_free
> NOTE:
> I have reviewed all the code, found:soc_camera_driver device driver coders has no way(callback function) to call videobuf_mmap_free; it will case memory leak.N r y b X ǧv ^ )޺{.n + { bj) w*jg ݢj/ z ޖ 2 ޙ & )ߡ a G h j:+v w ٥

---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
http://www.open-technology.de/��.n��������+%����;��w��{.n�����{��g����^n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�

[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux