* [PATCH v3 0/2] initialize vcodec scalar variable
@ 2025-09-07 9:35 Irui Wang
2025-09-07 9:35 ` [PATCH v3 1/2] media: mediatek: encoder: Fix uninitialized scalar variable issue Irui Wang
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Irui Wang @ 2025-09-07 9:35 UTC (permalink / raw)
To: Hans Verkuil, Mauro Carvalho Chehab, Matthias Brugger,
angelogioacchino.delregno, nicolas.dufresne, Tiffany Lin,
Yunfei Dong, Qianfeng Rong
Cc: Maoguang Meng, Longfei Wang, Irui Wang,
Project_Global_Chrome_Upstream_Group, linux-media, linux-kernel,
linux-arm-kernel, linux-mediatek
Initialize vcodec structures:
patch 1 add missing initialization to fix the encoder's UNINIT checker
issue.
patch 2 converts memset() to = { } for other vcodec structures.
Changes in v3:
- Converts memset() to = { }
- Combined with Qianfeng's patch as v3
- Link to v2: https://patchwork.linuxtv.org/project/linux-media/patch/20250715081547.18076-1-irui.wang@mediatek.com/
- Link to Qianfeng's v1: https://patchwork.linuxtv.org/project/linux-media/patch/20250803135514.118892-1-rongqianfeng@vivo.com/
Changes in v2:
- Add Fixes tag, update commit message
- Remove unnecessary memset
- Move memset to before the first usage
Irui Wang (1):
media: mediatek: encoder: Fix uninitialized scalar variable issue
Qianfeng Rong (1):
media: mediatek: vcodec: use = { } instead of memset()
.../mediatek/vcodec/decoder/vdec/vdec_vp9_if.c | 3 +--
.../mediatek/vcodec/decoder/vdec_vpu_if.c | 12 ++++--------
.../mediatek/vcodec/encoder/mtk_vcodec_enc.c | 12 +++++-------
.../mediatek/vcodec/encoder/venc_vpu_if.c | 15 +++++----------
4 files changed, 15 insertions(+), 27 deletions(-)
--
2.45.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 1/2] media: mediatek: encoder: Fix uninitialized scalar variable issue
2025-09-07 9:35 [PATCH v3 0/2] initialize vcodec scalar variable Irui Wang
@ 2025-09-07 9:35 ` Irui Wang
2025-09-07 9:35 ` [PATCH v3 2/2] media: mediatek: vcodec: use = { } instead of memset() Irui Wang
2025-09-08 12:10 ` [PATCH v3 0/2] initialize vcodec scalar variable AngeloGioacchino Del Regno
2 siblings, 0 replies; 4+ messages in thread
From: Irui Wang @ 2025-09-07 9:35 UTC (permalink / raw)
To: Hans Verkuil, Mauro Carvalho Chehab, Matthias Brugger,
angelogioacchino.delregno, nicolas.dufresne, Tiffany Lin,
Yunfei Dong, Qianfeng Rong
Cc: Maoguang Meng, Longfei Wang, Irui Wang,
Project_Global_Chrome_Upstream_Group, linux-media, linux-kernel,
linux-arm-kernel, linux-mediatek
UNINIT checker finds some instances of variables that are used
without being initialized, for example using the uninitialized
value enc_result.is_key_frm can result in unpredictable behavior,
so initialize these variables after declaring.
Fixes: 4e855a6efa54 ("[media] vcodec: mediatek: Add Mediatek V4L2 Video Encoder Driver")
Signed-off-by: Irui Wang <irui.wang@mediatek.com>
---
.../media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
index a01dc25a7699..acf6ddca1c88 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
@@ -865,7 +865,7 @@ static void vb2ops_venc_buf_queue(struct vb2_buffer *vb)
static int vb2ops_venc_start_streaming(struct vb2_queue *q, unsigned int count)
{
struct mtk_vcodec_enc_ctx *ctx = vb2_get_drv_priv(q);
- struct venc_enc_param param;
+ struct venc_enc_param param = { };
int ret;
int i;
@@ -1019,7 +1019,7 @@ static int mtk_venc_encode_header(void *priv)
int ret;
struct vb2_v4l2_buffer *src_buf, *dst_buf;
struct mtk_vcodec_mem bs_buf;
- struct venc_done_result enc_result;
+ struct venc_done_result enc_result = { };
dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
if (!dst_buf) {
@@ -1140,7 +1140,7 @@ static void mtk_venc_worker(struct work_struct *work)
struct vb2_v4l2_buffer *src_buf, *dst_buf;
struct venc_frm_buf frm_buf;
struct mtk_vcodec_mem bs_buf;
- struct venc_done_result enc_result;
+ struct venc_done_result enc_result = { };
int ret, i;
/* check dst_buf, dst_buf may be removed in device_run
--
2.45.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v3 2/2] media: mediatek: vcodec: use = { } instead of memset()
2025-09-07 9:35 [PATCH v3 0/2] initialize vcodec scalar variable Irui Wang
2025-09-07 9:35 ` [PATCH v3 1/2] media: mediatek: encoder: Fix uninitialized scalar variable issue Irui Wang
@ 2025-09-07 9:35 ` Irui Wang
2025-09-08 12:10 ` [PATCH v3 0/2] initialize vcodec scalar variable AngeloGioacchino Del Regno
2 siblings, 0 replies; 4+ messages in thread
From: Irui Wang @ 2025-09-07 9:35 UTC (permalink / raw)
To: Hans Verkuil, Mauro Carvalho Chehab, Matthias Brugger,
angelogioacchino.delregno, nicolas.dufresne, Tiffany Lin,
Yunfei Dong, Qianfeng Rong
Cc: Maoguang Meng, Longfei Wang, Irui Wang,
Project_Global_Chrome_Upstream_Group, linux-media, linux-kernel,
linux-arm-kernel, linux-mediatek
From: Qianfeng Rong <rongqianfeng@vivo.com>
Based on testing and recommendations by David Lechner et al. [1][2],
using = { } to initialize a structure or array is the preferred way
to do this in the kernel.
Converts memset() to = { }, thereby:
- Eliminating the risk of sizeof() mismatches.
- Simplifying the code.
[1]: https://lore.kernel.org/linux-iio/202505090942.48EBF01B@keescook/
[2]: https://lore.kernel.org/lkml/20250614151844.50524610@jic23-huawei/
Signed-off-by: Qianfeng Rong <rongqianfeng@vivo.com>
---
.../mediatek/vcodec/decoder/vdec/vdec_vp9_if.c | 3 +--
.../mediatek/vcodec/decoder/vdec_vpu_if.c | 12 ++++--------
.../mediatek/vcodec/encoder/mtk_vcodec_enc.c | 6 ++----
.../mediatek/vcodec/encoder/venc_vpu_if.c | 15 +++++----------
4 files changed, 12 insertions(+), 24 deletions(-)
diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_if.c
index eb3354192853..80554b2c26c0 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec/vdec_vp9_if.c
@@ -548,10 +548,9 @@ static bool vp9_wait_dec_end(struct vdec_vp9_inst *inst)
static struct vdec_vp9_inst *vp9_alloc_inst(struct mtk_vcodec_dec_ctx *ctx)
{
int result;
- struct mtk_vcodec_mem mem;
+ struct mtk_vcodec_mem mem = { };
struct vdec_vp9_inst *inst;
- memset(&mem, 0, sizeof(mem));
mem.size = sizeof(struct vdec_vp9_inst);
result = mtk_vcodec_mem_alloc(ctx, &mem);
if (result)
diff --git a/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c b/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c
index 145958206e38..d5e943f81c15 100644
--- a/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c
+++ b/drivers/media/platform/mediatek/vcodec/decoder/vdec_vpu_if.c
@@ -181,12 +181,11 @@ static int vcodec_vpu_send_msg(struct vdec_vpu_inst *vpu, void *msg, int len)
static int vcodec_send_ap_ipi(struct vdec_vpu_inst *vpu, unsigned int msg_id)
{
- struct vdec_ap_ipi_cmd msg;
+ struct vdec_ap_ipi_cmd msg = { };
int err = 0;
mtk_vdec_debug(vpu->ctx, "+ id=%X", msg_id);
- memset(&msg, 0, sizeof(msg));
msg.msg_id = msg_id;
if (vpu->fw_abi_version < 2)
msg.vpu_inst_addr = vpu->inst_addr;
@@ -201,7 +200,7 @@ static int vcodec_send_ap_ipi(struct vdec_vpu_inst *vpu, unsigned int msg_id)
int vpu_dec_init(struct vdec_vpu_inst *vpu)
{
- struct vdec_ap_ipi_init msg;
+ struct vdec_ap_ipi_init msg = { };
int err;
init_waitqueue_head(&vpu->wq);
@@ -225,7 +224,6 @@ int vpu_dec_init(struct vdec_vpu_inst *vpu)
}
}
- memset(&msg, 0, sizeof(msg));
msg.msg_id = AP_IPIMSG_DEC_INIT;
msg.ap_inst_addr = (unsigned long)vpu;
msg.codec_type = vpu->codec_type;
@@ -245,7 +243,7 @@ int vpu_dec_init(struct vdec_vpu_inst *vpu)
int vpu_dec_start(struct vdec_vpu_inst *vpu, uint32_t *data, unsigned int len)
{
- struct vdec_ap_ipi_dec_start msg;
+ struct vdec_ap_ipi_dec_start msg = { };
int i;
int err = 0;
@@ -254,7 +252,6 @@ int vpu_dec_start(struct vdec_vpu_inst *vpu, uint32_t *data, unsigned int len)
return -EINVAL;
}
- memset(&msg, 0, sizeof(msg));
msg.msg_id = AP_IPIMSG_DEC_START;
if (vpu->fw_abi_version < 2)
msg.vpu_inst_addr = vpu->inst_addr;
@@ -273,7 +270,7 @@ int vpu_dec_start(struct vdec_vpu_inst *vpu, uint32_t *data, unsigned int len)
int vpu_dec_get_param(struct vdec_vpu_inst *vpu, uint32_t *data,
unsigned int len, unsigned int param_type)
{
- struct vdec_ap_ipi_get_param msg;
+ struct vdec_ap_ipi_get_param msg = { };
int err;
if (len > ARRAY_SIZE(msg.data)) {
@@ -281,7 +278,6 @@ int vpu_dec_get_param(struct vdec_vpu_inst *vpu, uint32_t *data,
return -EINVAL;
}
- memset(&msg, 0, sizeof(msg));
msg.msg_id = AP_IPIMSG_DEC_GET_PARAM;
msg.inst_id = vpu->inst_id;
memcpy(msg.data, data, sizeof(unsigned int) * len);
diff --git a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
index acf6ddca1c88..d10e41e8e9ce 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/mtk_vcodec_enc.c
@@ -1064,7 +1064,7 @@ static int mtk_venc_encode_header(void *priv)
static int mtk_venc_param_change(struct mtk_vcodec_enc_ctx *ctx)
{
- struct venc_enc_param enc_prm;
+ struct venc_enc_param enc_prm = { };
struct vb2_v4l2_buffer *vb2_v4l2 = v4l2_m2m_next_src_buf(ctx->m2m_ctx);
struct mtk_video_enc_buf *mtk_buf;
int ret = 0;
@@ -1075,7 +1075,6 @@ static int mtk_venc_param_change(struct mtk_vcodec_enc_ctx *ctx)
mtk_buf = container_of(vb2_v4l2, struct mtk_video_enc_buf, m2m_buf.vb);
- memset(&enc_prm, 0, sizeof(enc_prm));
if (mtk_buf->param_change == MTK_ENCODE_PARAM_NONE)
return 0;
@@ -1138,7 +1137,7 @@ static void mtk_venc_worker(struct work_struct *work)
struct mtk_vcodec_enc_ctx *ctx = container_of(work, struct mtk_vcodec_enc_ctx,
encode_work);
struct vb2_v4l2_buffer *src_buf, *dst_buf;
- struct venc_frm_buf frm_buf;
+ struct venc_frm_buf frm_buf = { };
struct mtk_vcodec_mem bs_buf;
struct venc_done_result enc_result = { };
int ret, i;
@@ -1168,7 +1167,6 @@ static void mtk_venc_worker(struct work_struct *work)
return;
}
- memset(&frm_buf, 0, sizeof(frm_buf));
for (i = 0; i < src_buf->vb2_buf.num_planes ; i++) {
frm_buf.fb_addr[i].dma_addr =
vb2_dma_contig_plane_dma_addr(&src_buf->vb2_buf, i);
diff --git a/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c b/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c
index 51bb7ee141b9..55627b71348d 100644
--- a/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c
+++ b/drivers/media/platform/mediatek/vcodec/encoder/venc_vpu_if.c
@@ -132,7 +132,7 @@ static int vpu_enc_send_msg(struct venc_vpu_inst *vpu, void *msg,
int vpu_enc_init(struct venc_vpu_inst *vpu)
{
int status;
- struct venc_ap_ipi_msg_init out;
+ struct venc_ap_ipi_msg_init out = { };
init_waitqueue_head(&vpu->wq_hd);
vpu->signaled = 0;
@@ -148,7 +148,6 @@ int vpu_enc_init(struct venc_vpu_inst *vpu)
return -EINVAL;
}
- memset(&out, 0, sizeof(out));
out.msg_id = AP_IPIMSG_ENC_INIT;
out.venc_inst = (unsigned long)vpu;
if (vpu_enc_send_msg(vpu, &out, sizeof(out))) {
@@ -191,11 +190,10 @@ int vpu_enc_set_param(struct venc_vpu_inst *vpu,
size_t msg_size = is_ext ?
sizeof(struct venc_ap_ipi_msg_set_param_ext) :
sizeof(struct venc_ap_ipi_msg_set_param);
- struct venc_ap_ipi_msg_set_param_ext out;
+ struct venc_ap_ipi_msg_set_param_ext out = { };
mtk_venc_debug(vpu->ctx, "id %d ->", id);
- memset(&out, 0, sizeof(out));
out.base.msg_id = AP_IPIMSG_ENC_SET_PARAM;
out.base.vpu_inst_addr = vpu->inst_addr;
out.base.param_id = id;
@@ -258,11 +256,10 @@ static int vpu_enc_encode_32bits(struct venc_vpu_inst *vpu,
size_t msg_size = is_ext ?
sizeof(struct venc_ap_ipi_msg_enc_ext) :
sizeof(struct venc_ap_ipi_msg_enc);
- struct venc_ap_ipi_msg_enc_ext out;
+ struct venc_ap_ipi_msg_enc_ext out = { };
mtk_venc_debug(vpu->ctx, "bs_mode %d ->", bs_mode);
- memset(&out, 0, sizeof(out));
out.base.msg_id = AP_IPIMSG_ENC_ENCODE;
out.base.vpu_inst_addr = vpu->inst_addr;
out.base.bs_mode = bs_mode;
@@ -302,12 +299,11 @@ static int vpu_enc_encode_34bits(struct venc_vpu_inst *vpu,
struct mtk_vcodec_mem *bs_buf,
struct venc_frame_info *frame_info)
{
- struct venc_ap_ipi_msg_enc_ext_34 out;
+ struct venc_ap_ipi_msg_enc_ext_34 out = { };
size_t msg_size = sizeof(struct venc_ap_ipi_msg_enc_ext_34);
mtk_venc_debug(vpu->ctx, "bs_mode %d ->", bs_mode);
- memset(&out, 0, sizeof(out));
out.msg_id = AP_IPIMSG_ENC_ENCODE;
out.vpu_inst_addr = vpu->inst_addr;
out.bs_mode = bs_mode;
@@ -367,9 +363,8 @@ int vpu_enc_encode(struct venc_vpu_inst *vpu, unsigned int bs_mode,
int vpu_enc_deinit(struct venc_vpu_inst *vpu)
{
- struct venc_ap_ipi_msg_deinit out;
+ struct venc_ap_ipi_msg_deinit out = { };
- memset(&out, 0, sizeof(out));
out.msg_id = AP_IPIMSG_ENC_DEINIT;
out.vpu_inst_addr = vpu->inst_addr;
if (vpu_enc_send_msg(vpu, &out, sizeof(out))) {
--
2.45.2
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH v3 0/2] initialize vcodec scalar variable
2025-09-07 9:35 [PATCH v3 0/2] initialize vcodec scalar variable Irui Wang
2025-09-07 9:35 ` [PATCH v3 1/2] media: mediatek: encoder: Fix uninitialized scalar variable issue Irui Wang
2025-09-07 9:35 ` [PATCH v3 2/2] media: mediatek: vcodec: use = { } instead of memset() Irui Wang
@ 2025-09-08 12:10 ` AngeloGioacchino Del Regno
2 siblings, 0 replies; 4+ messages in thread
From: AngeloGioacchino Del Regno @ 2025-09-08 12:10 UTC (permalink / raw)
To: Irui Wang, Hans Verkuil, Mauro Carvalho Chehab, Matthias Brugger,
nicolas.dufresne, Tiffany Lin, Yunfei Dong, Qianfeng Rong
Cc: Maoguang Meng, Longfei Wang,
Project_Global_Chrome_Upstream_Group, linux-media, linux-kernel,
linux-arm-kernel, linux-mediatek
Il 07/09/25 11:35, Irui Wang ha scritto:
> Initialize vcodec structures:
> patch 1 add missing initialization to fix the encoder's UNINIT checker
> issue.
>
> patch 2 converts memset() to = { } for other vcodec structures.
>
> Changes in v3:
> - Converts memset() to = { }
> - Combined with Qianfeng's patch as v3
> - Link to v2: https://patchwork.linuxtv.org/project/linux-media/patch/20250715081547.18076-1-irui.wang@mediatek.com/
> - Link to Qianfeng's v1: https://patchwork.linuxtv.org/project/linux-media/patch/20250803135514.118892-1-rongqianfeng@vivo.com/
>
> Changes in v2:
> - Add Fixes tag, update commit message
> - Remove unnecessary memset
> - Move memset to before the first usage
>
>
> Irui Wang (1):
> media: mediatek: encoder: Fix uninitialized scalar variable issue
>
> Qianfeng Rong (1):
> media: mediatek: vcodec: use = { } instead of memset()
>
> .../mediatek/vcodec/decoder/vdec/vdec_vp9_if.c | 3 +--
> .../mediatek/vcodec/decoder/vdec_vpu_if.c | 12 ++++--------
> .../mediatek/vcodec/encoder/mtk_vcodec_enc.c | 12 +++++-------
> .../mediatek/vcodec/encoder/venc_vpu_if.c | 15 +++++----------
> 4 files changed, 15 insertions(+), 27 deletions(-)
>
Whole series is
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Cheers,
Angelo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-09-08 12:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-09-07 9:35 [PATCH v3 0/2] initialize vcodec scalar variable Irui Wang
2025-09-07 9:35 ` [PATCH v3 1/2] media: mediatek: encoder: Fix uninitialized scalar variable issue Irui Wang
2025-09-07 9:35 ` [PATCH v3 2/2] media: mediatek: vcodec: use = { } instead of memset() Irui Wang
2025-09-08 12:10 ` [PATCH v3 0/2] initialize vcodec scalar variable AngeloGioacchino Del Regno
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®