linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Nicolas Dufresne <nicolas@ndufresne.ca>
To: Qianfeng Rong <rongqianfeng@vivo.com>,
	Tiffany Lin	 <tiffany.lin@mediatek.com>,
	Andrew-CT Chen <andrew-ct.chen@mediatek.com>,
	 Yunfei Dong <yunfei.dong@mediatek.com>,
	Mauro Carvalho Chehab <mchehab@kernel.org>,
	Matthias Brugger	 <matthias.bgg@gmail.com>,
	AngeloGioacchino Del Regno	
	<angelogioacchino.delregno@collabora.com>,
	Hans Verkuil <hverkuil@kernel.org>,
	 Andrzej Pietrasiewicz <andrzejtp2010@gmail.com>,
	Neil Armstrong <neil.armstrong@linaro.org>,
	linux-media@vger.kernel.org, 	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org,
		linux-mediatek@lists.infradead.org
Subject: Re: [PATCH] media: mediatek: vcodec: use = { } instead of memset()
Date: Fri, 29 Aug 2025 14:49:47 -0400	[thread overview]
Message-ID: <d76038453bfd06ea9d0c90e7583078abc85ce280.camel@ndufresne.ca> (raw)
In-Reply-To: <20250803135514.118892-1-rongqianfeng@vivo.com>

[-- Attachment #1: Type: text/plain, Size: 9627 bytes --]

Hi,


Le dimanche 03 août 2025 à 21:55 +0800, Qianfeng Rong a écrit :
> 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.
> 
> This patch converts memset() to = { }, thereby:
> - Eliminating the risk of sizeof() mismatches.
> - Simplifying the code.

Last month, Irui Wang sent an actual fix [0] for uninitialized data in this
driver. Your patch seems to be related, yet the previous fix is not covered and
this is not marked as a V2. Since this refactoring collide with an actual fix
that I'm waiting for a V2, I'd rather not take it and wait.

Any chances you can respin this with a second patches covering Irui's fix ?

cheers,
Nicolas


[0] https://patchwork.linuxtv.org/project/linux-media/patch/20250715081547.18076-1-irui.wang@mediatek.com/

> 
> [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 a01dc25a7699..bc6435a7543f 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))) {

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

  parent reply	other threads:[~2025-08-30  0:51 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-08-03 13:55 [PATCH] media: mediatek: vcodec: use = { } instead of memset() Qianfeng Rong
2025-08-05 13:06 ` Markus Elfring
2025-08-05 13:17   ` Qianfeng Rong
2025-08-05 13:32     ` Markus Elfring
2025-08-29 18:57       ` Nicolas Dufresne
2025-08-30  7:49         ` Qianfeng Rong
2025-08-29 18:49 ` Nicolas Dufresne [this message]
2025-08-30  8:25   ` [PATCH] " Qianfeng Rong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=d76038453bfd06ea9d0c90e7583078abc85ce280.camel@ndufresne.ca \
    --to=nicolas@ndufresne.ca \
    --cc=andrew-ct.chen@mediatek.com \
    --cc=andrzejtp2010@gmail.com \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=hverkuil@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=matthias.bgg@gmail.com \
    --cc=mchehab@kernel.org \
    --cc=neil.armstrong@linaro.org \
    --cc=rongqianfeng@vivo.com \
    --cc=tiffany.lin@mediatek.com \
    --cc=yunfei.dong@mediatek.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).