• Sylwester Nawrocki's avatar
    [media] s5p-fimc: Prevent lock-up in multiple sensor systems · e3fc82e8
    Sylwester Nawrocki authored
    The camera clocks managed by the driver were improperly reference counted
    and remained disabled when multiple video nodes were opened simultaneously.
    It manifested itself with following warning:
    
     [12.920000] WARNING: at drivers/media/video/s5p-fimc/fimc-mdevice.c:787 __fimc_md_set_camclk+0x1c0/0x1dc()
     [13.005000] Modules linked in:
     [13.005000] Backtrace:
     [13.040000] [<c0013084>] (dump_backtrace+0x0/0x10c) from [<c0454b70>] (dump_stack+0x18/0x1c)
     [13.070000]  r7:00000009 r6:00000313 r5:c02d576c r4:00000000
     [13.155000] [<c0454b58>] (dump_stack+0x0/0x1c) from [<c0022ec4>] (warn_slowpath_common+0x54/0x6c)
     [13.285000] [<c0022e70>] (warn_slowpath_common+0x0/0x6c) from [<c0022f00>] (warn_slowpath_null+0x24/0x2c)
     [13.360000]  r9:e1981010 r8:00000000 r7:c061d3fc r6:e1981010 r5:e1981030
     [13.430000] r4:00000000
     [13.430000] [<c0022edc>] (warn_slowpath_null+0x0/0x2c) from [<c02d576c>] (__fimc_md_set_camclk+0x1c0/0x1dc)
     [13.550000] [<c02d55ac>] (__fimc_md_set_camclk+0x0/0x1dc) from [<c02d57b0>] (fimc_md_set_camclk+0x28/0x2c)
     [13.630000] [<c02d5788>] (fimc_md_set_camclk+0x0/0x2c) from [<c02d57e8>] (__fimc_pipeline_shutdown+0x34/0x50)
     [13.705000] [<c02d57b4>] (__fimc_pipeline_shutdown+0x0/0x50) from [<c02d5844>] (fimc_pipeline_shutdown+0x40/0x58)
     [13.765000]  r5:e2391200 r4:e2357704
     [13.805000] [<c02d5804>] (fimc_pipeline_shutdown+0x0/0x58) from [<c02d4754>] (fimc_capture_close+0xcc/0xe4)
     [13.915000]  r5:e1b396c0 r4:e2357410
     [13.915000] [<c02d4688>] (fimc_capture_close+0x0/0xe4) from [<c02b2d5c>] (v4l2_release+0x5c/0x80)
     [13.970000]  r7:00000010 r6:e1d2d990 r5:e1b396c0 r4:e2394800
     [14.000000] [<c02b2d00>] (v4l2_release+0x0/0x80) from [<c00b66cc>] (fput+0xc0/0x22c)
     [14.015000]  r5:c157ef30 r4:e1b396c0
     [14.015000] [<c00b660c>] (fput+0x0/0x22c) from [<c00b2ca0>] (filp_close+0x60/0x80)
     [14.080000] [<c00b2c40>] (filp_close+0x0/0x80) from [<c00b2d78>] (sys_close+0xb8/0xf4)
     [14.125000]  r7:00000001 r6:e1b396c0 r5:c1400340 r4:c1400300
     [14.125000] [<c00b2cc0>] (sys_close+0x0/0xf4) from [<c000f300>] (ret_fast_syscall+0x0/0x30)
     [14.205000]  r7:00000006 r6:beee5b94 r5:00000003 r4:b6f64fac
    
    Fix this, as well as potential memory leaks due to not calling
    v4l2_fh_release() on some error paths.
    
    Also remove some error logs printed for events that aren't critical and
    are normal conditions for some system configurations.
    
    Also check if the device have been properly run-time enabled during
    video node open.
    Signed-off-by: default avatarSylwester Nawrocki <s.nawrocki@samsung.com>
    Signed-off-by: default avatarKyungmin Park <kyungmin.park@samsung.com>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    e3fc82e8
fimc-lite.c 40.4 KB