• Hans Verkuil's avatar
    media: cec-adap.c: don't use flush_scheduled_work() · 288eceb0
    Hans Verkuil authored
    For some inexplicable reason I decided to call flush_scheduled_work()
    instead of cancel_delayed_work_sync(). The problem with that is that
    flush_scheduled_work() waits for *all* queued scheduled work to be
    completed instead of just the work itself.
    
    This can cause a deadlock if a CEC driver also schedules work that
    takes the same lock. See the comments for flush_scheduled_work() in
    linux/workqueue.h.
    
    This is exactly what has been observed a few times.
    
    This patch simply replaces flush_scheduled_work() by
    cancel_delayed_work_sync().
    Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
    Cc: <stable@vger.kernel.org>      # for v5.8 and up
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
    288eceb0
cec-adap.c 62.8 KB