]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
media: amphion: release core lock before reset vpu core
authorMing Qian <ming.qian@nxp.com>
Tue, 28 Jun 2022 05:19:52 +0000 (06:19 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:41:00 +0000 (14:41 +0200)
[ Upstream commit a621cc4bed97e49f5a8019f5215dec7e208a7c4d ]

In reset vpu core, driver will wait for a response event,
but if there are still some events unhandled,
they will be handled first, driver may acquire core lock for that.
So if we do reset in core lock, it may led to reset timeout.

Fixes: 9f599f351e86a ("media: amphion: add vpu core driver")
Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/amphion/vpu_core.c

index 68ad183925fdbd3985d05a0820ebeacd606951c8..51a764713159a651616435b32635b49ee4df60ff 100644 (file)
@@ -455,8 +455,13 @@ int vpu_inst_unregister(struct vpu_inst *inst)
        }
        vpu_core_check_hang(core);
        if (core->state == VPU_CORE_HANG && !core->instance_mask) {
+               int err;
+
                dev_info(core->dev, "reset hang core\n");
-               if (!vpu_core_sw_reset(core)) {
+               mutex_unlock(&core->lock);
+               err = vpu_core_sw_reset(core);
+               mutex_lock(&core->lock);
+               if (!err) {
                        core->state = VPU_CORE_ACTIVE;
                        core->hang_mask = 0;
                }