media: amphion: add lock around vdec_g_fmt
authorMing Qian <ming.qian@nxp.com>
Tue, 1 Nov 2022 08:04:20 +0000 (16:04 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 31 Dec 2022 12:32:12 +0000 (13:32 +0100)
[ Upstream commit 8480dd5fb3c82b5887d456b3fbe4201d99231814 ]

the capture format may be changed when
sequence header is parsed,
it may be read and write in the same time,
add lock around vdec_g_fmt to synchronize it

Fixes: 6de8d628df6e ("media: amphion: add v4l2 m2m vpu decoder stateful driver")
Signed-off-by: Ming Qian <ming.qian@nxp.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/media/platform/amphion/vdec.c

index 84c90ce265f2b5deefca6338e3008741bdb766f5..b27e6bed85f0f4cbda6f9c92af0470d8ba81bc7f 100644 (file)
@@ -286,6 +286,7 @@ static int vdec_g_fmt(struct file *file, void *fh, struct v4l2_format *f)
        struct vpu_format *cur_fmt;
        int i;
 
+       vpu_inst_lock(inst);
        cur_fmt = vpu_get_format(inst, f->type);
 
        pixmp->pixelformat = cur_fmt->pixfmt;
@@ -303,6 +304,7 @@ static int vdec_g_fmt(struct file *file, void *fh, struct v4l2_format *f)
        f->fmt.pix_mp.xfer_func = vdec->codec_info.transfer_chars;
        f->fmt.pix_mp.ycbcr_enc = vdec->codec_info.matrix_coeffs;
        f->fmt.pix_mp.quantization = vdec->codec_info.full_range;
+       vpu_inst_unlock(inst);
 
        return 0;
 }