• Ming Qian's avatar
    media: imx-jpeg: Lock on ioctl encoder/decoder stop cmd · df71c6e4
    Ming Qian authored
    the ioctl encoder/decoder cmd is under queue lock,
    and buf_done is in the irq, it can't be locked with the mutex,
    they are not synchronized.
    when v4l2_update_last_buf_state is called to
    handle the encoder/decoder stop cmd,
    the last src buffer may be done at the same time.
    
    so it's possible that last_src_buf is set,
    but the output rdy_queue is empty,
    then driver won't mark it stopped,
    as v4l2_m2m_is_last_draining_src_buf() will always return false and
    v4l2_m2m_dst_buf_is_last() return false too.
    
    In this case, the drain will be blocked.
    
    add the hw lock around the ioctl encoder/decoder cmd,
    to synchronize with the buf_done.
    
    Fixes: 4911c5ac ("media: imx-jpeg: Implement drain using v4l2-mem2mem helpers")
    Signed-off-by: default avatarMing Qian <ming.qian@nxp.com>
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    df71c6e4
mxc-jpeg.c 75.3 KB