[<prev] [next>] [day] [month] [year] [list]
Message-Id: <20250821-isi_m2m-v2-1-c616e4b00600@nxp.com>
Date: Thu, 21 Aug 2025 14:08:29 +0800
From: Guoniu Zhou <guoniu.zhou@....com>
To: Laurent Pinchart <laurent.pinchart@...asonboard.com>,
Mauro Carvalho Chehab <mchehab@...nel.org>, Shawn Guo <shawnguo@...nel.org>,
Sascha Hauer <s.hauer@...gutronix.de>,
Pengutronix Kernel Team <kernel@...gutronix.de>,
Fabio Estevam <festevam@...il.com>, Dong Aisheng <aisheng.dong@....com>,
Stefan Riedmueller <s.riedmueller@...tec.de>
Cc: Christian Hemp <c.hemp@...tec.de>, Jacopo Mondi <jacopo@...ndi.org>,
linux-media@...r.kernel.org, imx@...ts.linux.dev,
linux-arm-kernel@...ts.infradead.org, linux-kernel@...r.kernel.org,
stable@...r.kernel.org, Frank Li <Frank.Li@....com>,
Guoniu Zhou <guoniu.zhou@....com>
Subject: [PATCH v2] media: nxp: imx8-isi: Fix streamon/streamoff calls are
imbalanced issue
If streamon/streamoff calls are imbalanced, such as exit application
with Ctrl+C when streaming, m2m usage_count will never reach to zero
and ISI channel won't be freed. Besides from that, if the input line
width is more 2K and exit with Ctrl+C when streaming, it will trigger
kernel panic, like bellow:
[ 59.222120] ------------[ cut here ]------------
[ 59.226758] WARNING: drivers/media/platform/nxp/imx8-isi/imx8-isi-hw.c:631 at mxc_isi_channel_chain+0xa4/0x120, CPU#4: v4l2-ctl/654
[ 59.238569] Modules linked in: ap1302
[ 59.242231] CPU: 4 UID: 0 PID: 654 Comm: v4l2-ctl Not tainted 6.16.0-rc4-next-20250704-06511-gff0e002d480a-dirty #258 PREEMPT
[ 59.253597] Hardware name: NXP i.MX95 15X15 board (DT)
[ 59.258720] pstate: 80400009 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 59.265669] pc : mxc_isi_channel_chain+0xa4/0x120
[ 59.270358] lr : mxc_isi_channel_chain+0x44/0x120
[ 59.275047] sp : ffff8000848c3b40
[ 59.278348] x29: ffff8000848c3b40 x28: ffff0000859b4c98 x27: ffff800081939f00
[ 59.285472] x26: 000000000000000a x25: ffff0000859b4cb8 x24: 0000000000000001
[ 59.292597] x23: ffff0000816f4760 x22: ffff0000816f4258 x21: ffff000084ceb780
[ 59.299720] x20: ffff000084342ff8 x19: ffff000084340000 x18: 0000000000000000
[ 59.306845] x17: 0000000000000000 x16: 0000000000000000 x15: 0000ffffdb369e1c
[ 59.313969] x14: 0000000000000000 x13: 0000000000000000 x12: 0000000000000000
[ 59.321093] x11: 0000000000000000 x10: 0000000000000000 x9 : 0000000000000000
[ 59.328217] x8 : ffff8000848c3d48 x7 : ffff800081930b30 x6 : ffff800081930b30
[ 59.335340] x5 : ffff0000859b6000 x4 : ffff80008193ae80 x3 : ffff800081022420
[ 59.342464] x2 : ffff0000852f6900 x1 : 0000000000000001 x0 : ffff000084341000
[ 59.349590] Call trace:
[ 59.352025] mxc_isi_channel_chain+0xa4/0x120 (P)
[ 59.356722] mxc_isi_m2m_streamon+0x160/0x20c
[ 59.361072] v4l_streamon+0x24/0x30
[ 59.364556] __video_do_ioctl+0x40c/0x4a0
[ 59.368560] video_usercopy+0x2bc/0x690
[ 59.372382] video_ioctl2+0x18/0x24
[ 59.375857] v4l2_ioctl+0x40/0x60
[ 59.379168] __arm64_sys_ioctl+0xac/0x104
[ 59.383172] invoke_syscall+0x48/0x104
[ 59.386916] el0_svc_common.constprop.0+0xc0/0xe0
[ 59.391613] do_el0_svc+0x1c/0x28
[ 59.394915] el0_svc+0x34/0xf4
[ 59.397966] el0t_64_sync_handler+0xa0/0xe4
[ 59.402143] el0t_64_sync+0x198/0x19c
[ 59.405801] ---[ end trace 0000000000000000 ]---
VIDIOC_STREAMON returned -1 (Invalid argument)
So check the queue streaming status when application close and call
streamoff to fix the issue.
Fixes: cf21f328fcaf ("media: nxp: Add i.MX8 ISI driver")
Cc: stable@...r.kernel.org
Reviewed-by: Frank Li <Frank.Li@....com>
Signed-off-by: Guoniu Zhou <guoniu.zhou@....com>
---
Changes in v2:
- No functions changed, add Cc:stable@...r.kernel.org tag in the sign-off area
- Link to v1: https://lore.kernel.org/r/20250818-isi_m2m-v1-1-bbe2b774d4bf@nxp.com
---
drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
index 22e49d3a128732c077beb7ac2e2f688e0899f8e2..7650a9fe6b093e2b4e09e3e66b624c8c019c8583 100644
--- a/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
+++ b/drivers/media/platform/nxp/imx8-isi/imx8-isi-m2m.c
@@ -709,6 +709,14 @@ static int mxc_isi_m2m_release(struct file *file)
struct mxc_isi_m2m *m2m = video_drvdata(file);
struct mxc_isi_m2m_ctx *ctx = to_isi_m2m_ctx(file->private_data);
+ if (ctx->queues.out.streaming)
+ mxc_isi_m2m_streamoff(file, &ctx->fh,
+ V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
+
+ if (ctx->queues.cap.streaming)
+ mxc_isi_m2m_streamoff(file, &ctx->fh,
+ V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
+
v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
mxc_isi_m2m_ctx_ctrls_delete(ctx);
---
base-commit: 8f5ae30d69d7543eee0d70083daf4de8fe15d585
change-id: 20250818-isi_m2m-ac52338ae925
Best regards,
--
Guoniu Zhou <guoniu.zhou@....com>
Powered by blists - more mailing lists