• Vikash Garodia's avatar
    media: venus: fixes for list corruption · e1c69c4e
    Vikash Garodia authored
    There are few list handling issues while adding and deleting
    node in the registered buf list in the driver.
    1. list addition - buffer added into the list during buf_init
    while not deleted during cleanup.
    2. list deletion - In capture streamoff, the list was reinitialized.
    As a result, if any node was present in the list, it would
    lead to issue while cleaning up that node during buf_cleanup.
    
    Corresponding call traces below:
    [  165.751014] Call trace:
    [  165.753541]  __list_add_valid+0x58/0x88
    [  165.757532]  venus_helper_vb2_buf_init+0x74/0xa8 [venus_core]
    [  165.763450]  vdec_buf_init+0x34/0xb4 [venus_dec]
    [  165.768271]  __buf_prepare+0x598/0x8a0 [videobuf2_common]
    [  165.773820]  vb2_core_qbuf+0xb4/0x334 [videobuf2_common]
    [  165.779298]  vb2_qbuf+0x78/0xb8 [videobuf2_v4l2]
    [  165.784053]  v4l2_m2m_qbuf+0x80/0xf8 [v4l2_mem2mem]
    [  165.789067]  v4l2_m2m_ioctl_qbuf+0x2c/0x38 [v4l2_mem2mem]
    [  165.794624]  v4l_qbuf+0x48/0x58
    
    [ 1797.556001] Call trace:
    [ 1797.558516]  __list_del_entry_valid+0x88/0x9c
    [ 1797.562989]  vdec_buf_cleanup+0x54/0x228 [venus_dec]
    [ 1797.568088]  __buf_prepare+0x270/0x8a0 [videobuf2_common]
    [ 1797.573625]  vb2_core_qbuf+0xb4/0x338 [videobuf2_common]
    [ 1797.579082]  vb2_qbuf+0x78/0xb8 [videobuf2_v4l2]
    [ 1797.583830]  v4l2_m2m_qbuf+0x80/0xf8 [v4l2_mem2mem]
    [ 1797.588843]  v4l2_m2m_ioctl_qbuf+0x2c/0x38 [v4l2_mem2mem]
    [ 1797.594389]  v4l_qbuf+0x48/0x58
    Signed-off-by: default avatarVikash Garodia <vgarodia@codeaurora.org>
    Reviewed-by: default avatarFritz Koenig <frkoenig@chromium.org>
    Signed-off-by: default avatarStanimir Varbanov <stanimir.varbanov@linaro.org>
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    e1c69c4e
vdec.c 39.9 KB