mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-05-26 11:40:24 +02:00
media: chips-media: wave5: add missing spinlock protection for handle_dynamic_resolution_change()
Add spin_lock_irqsave()/spin_unlock_irqrestore() around the
handle_dynamic_resolution_change() call in initialize_sequence() to fix
the missing lock protection.
initialize_sequence() calls handle_dynamic_resolution_change() without
holding inst->state_spinlock. However, handle_dynamic_resolution_change()
has lockdep_assert_held(&inst->state_spinlock) indicating that callers
must hold this lock.
Other callers of handle_dynamic_resolution_change() properly acquire the
spinlock:
- wave5_vpu_dec_finish_decode()
- wave5_vpu_dec_device_run()
Signed-off-by: Ziyi Guo <n7l8m4@u.northwestern.edu>
Reviewed-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Fixes: 9707a6254a ("media: chips-media: wave5: Add the v4l2 layer")
Cc: stable@vger.kernel.org
Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
@@ -1593,6 +1593,7 @@ static int initialize_sequence(struct vpu_instance *inst)
|
||||
{
|
||||
struct dec_initial_info initial_info;
|
||||
int ret = 0;
|
||||
unsigned long flags;
|
||||
|
||||
memset(&initial_info, 0, sizeof(struct dec_initial_info));
|
||||
|
||||
@@ -1614,7 +1615,9 @@ static int initialize_sequence(struct vpu_instance *inst)
|
||||
return ret;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&inst->state_spinlock, flags);
|
||||
handle_dynamic_resolution_change(inst);
|
||||
spin_unlock_irqrestore(&inst->state_spinlock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user