]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: chips-media: wave5: add missing spinlock protection for handle_dynamic_resolut...
authorZiyi Guo <n7l8m4@u.northwestern.edu>
Sat, 31 Jan 2026 22:19:07 +0000 (22:19 +0000)
committerHans Verkuil <hverkuil+cisco@kernel.org>
Mon, 23 Mar 2026 10:18:33 +0000 (11:18 +0100)
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: 9707a6254a8a6b ("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>
drivers/media/platform/chips-media/wave5/wave5-vpu-dec.c

index 18cd1a6a7e1d71933c3637b22da97132ea4c4c47..d419076d7052c61ec50a40df3c1049031de07764 100644 (file)
@@ -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;
 }