summaryrefslogtreecommitdiff
path: root/drivers/media
diff options
context:
space:
mode:
authorLad, Prabhakar <prabhakar.csengg@gmail.com>2014-03-23 02:44:11 -0300
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-04-15 09:54:38 -0300
commitc1d1e40b8bbd712d6a8c74d8278178c8448b7abc (patch)
treee1608a2b7abecf5f237318da7a458e3d0b5cd8d2 /drivers/media
parentd891ae5ef1efda590569b4483664c64b4aca4a4d (diff)
[media] media: davinci: vpfe: make sure all the buffers unmapped and released
this patch makes sure that it terminates if any IO in progress and also makes sure that all the buffers are unmapped. It was observed that with several runs of application the application sometimes failed to allocate memory, This patch makes sure it all the buffers are released. Using kmemleak it was found that buffer were not released, this patch fixes following issue, echo scan > /sys/kernel/debug/kmemleak Kernel message reads: memleak: 3 new suspected memory leaks (see /sys/kernel/debug/kmemleak) Then, cat /sys/kernel/debug/kmemleak unreferenced object 0xc564a480 (size 192): comm "mttest", pid 764, jiffies 4294945878 (age 487.160s) hex dump (first 32 bytes): 00 00 00 00 28 07 07 20 d0 02 00 00 e0 01 00 00 ....(.. ........ 00 00 00 00 00 64 05 00 01 00 00 00 01 00 00 00 .....d.......... backtrace: [<c00a98dc>] create_object+0x10c/0x28c [<c03ba8ec>] kmemleak_alloc+0x3c/0x70 [<c00a67c0>] __kmalloc+0x11c/0x1d4 [<c02b6f48>] __videobuf_alloc+0x1c/0x3c [<c02b6194>] videobuf_alloc_vb+0x38/0x80 [<c02b6638>] __videobuf_mmap_setup+0x9c/0x108 [<c02b6da0>] videobuf_reqbufs.part.10+0x12c/0x1bc [<c02b6e9c>] videobuf_reqbufs+0x6c/0x8c [<c02be2c4>] vpfe_reqbufs+0xcc/0x130 [<c02aae90>] v4l_reqbufs+0x50/0x54 [<c02aab54>] __video_do_ioctl+0x260/0x2c4 [<c02a9dd4>] video_usercopy+0xf0/0x310 [<c02aa008>] video_ioctl2+0x14/0x1c [<c02a562c>] v4l2_ioctl+0x104/0x14c [<c00bd320>] do_vfs_ioctl+0x80/0x2d0 [<c00bd5b4>] SyS_ioctl+0x44/0x64 unreferenced object 0xc564ac00 (size 192): comm "mttest", pid 764, jiffies 4294945878 (age 487.160s) hex dump (first 32 bytes): 01 00 00 00 28 07 07 20 d0 02 00 00 e0 01 00 00 ....(.. ........ 00 00 00 00 00 64 05 00 01 00 00 00 01 00 00 00 .....d.......... backtrace: [<c00a98dc>] create_object+0x10c/0x28c [<c03ba8ec>] kmemleak_alloc+0x3c/0x70 [<c00a67c0>] __kmalloc+0x11c/0x1d4 [<c02b6f48>] __videobuf_alloc+0x1c/0x3c [<c02b6194>] videobuf_alloc_vb+0x38/0x80 [<c02b6638>] __videobuf_mmap_setup+0x9c/0x108 [<c02b6da0>] videobuf_reqbufs.part.10+0x12c/0x1bc [<c02b6e9c>] videobuf_reqbufs+0x6c/0x8c [<c02be2c4>] vpfe_reqbufs+0xcc/0x130 [<c02aae90>] v4l_reqbufs+0x50/0x54 [<c02aab54>] __video_do_ioctl+0x260/0x2c4 [<c02a9dd4>] video_usercopy+0xf0/0x310 [<c02aa008>] video_ioctl2+0x14/0x1c [<c02a562c>] v4l2_ioctl+0x104/0x14c [<c00bd320>] do_vfs_ioctl+0x80/0x2d0 [<c00bd5b4>] SyS_ioctl+0x44/0x64 unreferenced object 0xc564a180 (size 192): comm "mttest", pid 764, jiffies 4294945880 (age 487.140s) hex dump (first 32 bytes): 02 00 00 00 28 07 07 20 d0 02 00 00 e0 01 00 00 ....(.. ........ 00 00 00 00 00 64 05 00 01 00 00 00 01 00 00 00 .....d.......... backtrace: [<c00a98dc>] create_object+0x10c/0x28c [<c03ba8ec>] kmemleak_alloc+0x3c/0x70 [<c00a67c0>] __kmalloc+0x11c/0x1d4 [<c02b6f48>] __videobuf_alloc+0x1c/0x3c [<c02b6194>] videobuf_alloc_vb+0x38/0x80 [<c02b6638>] __videobuf_mmap_setup+0x9c/0x108 [<c02b6da0>] videobuf_reqbufs.part.10+0x12c/0x1bc [<c02b6e9c>] videobuf_reqbufs+0x6c/0x8c [<c02be2c4>] vpfe_reqbufs+0xcc/0x130 [<c02aae90>] v4l_reqbufs+0x50/0x54 [<c02aab54>] __video_do_ioctl+0x260/0x2c4 [<c02a9dd4>] video_usercopy+0xf0/0x310 [<c02aa008>] video_ioctl2+0x14/0x1c [<c02a562c>] v4l2_ioctl+0x104/0x14c [<c00bd320>] do_vfs_ioctl+0x80/0x2d0 [<c00bd5b4>] SyS_ioctl+0x44/0x64 Reported-by: Jimmy Ho <jimmygge@gmail.com> Signed-off-by: Lad, Prabhakar <prabhakar.csengg@gmail.com> Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/platform/davinci/vpfe_capture.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/media/platform/davinci/vpfe_capture.c b/drivers/media/platform/davinci/vpfe_capture.c
index d762246eabf5..0379cb9f9a9c 100644
--- a/drivers/media/platform/davinci/vpfe_capture.c
+++ b/drivers/media/platform/davinci/vpfe_capture.c
@@ -734,6 +734,8 @@ static int vpfe_release(struct file *file)
}
vpfe_dev->io_usrs = 0;
vpfe_dev->numbuffers = config_params.numbuffers;
+ videobuf_stop(&vpfe_dev->buffer_queue);
+ videobuf_mmap_free(&vpfe_dev->buffer_queue);
}
/* Decrement device usrs counter */