linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] media: nxp: imx8-isi: Fix streamon/streamoff calls are imbalanced issue
@ 2025-08-18  6:22 Guoniu Zhou
  2025-08-18 15:53 ` Frank Li
  0 siblings, 1 reply; 2+ messages in thread
From: Guoniu Zhou @ 2025-08-18  6:22 UTC (permalink / raw)
  To: Laurent Pinchart, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Dong Aisheng,
	Stefan Riedmueller
  Cc: Christian Hemp, Jacopo Mondi, linux-media, imx, linux-arm-kernel,
	linux-kernel, Guoniu Zhou

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")
Signed-off-by: Guoniu Zhou <guoniu.zhou@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@nxp.com>



^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] media: nxp: imx8-isi: Fix streamon/streamoff calls are imbalanced issue
  2025-08-18  6:22 [PATCH] media: nxp: imx8-isi: Fix streamon/streamoff calls are imbalanced issue Guoniu Zhou
@ 2025-08-18 15:53 ` Frank Li
  0 siblings, 0 replies; 2+ messages in thread
From: Frank Li @ 2025-08-18 15:53 UTC (permalink / raw)
  To: Guoniu Zhou
  Cc: Laurent Pinchart, Mauro Carvalho Chehab, Shawn Guo, Sascha Hauer,
	Pengutronix Kernel Team, Fabio Estevam, Dong Aisheng,
	Stefan Riedmueller, Christian Hemp, Jacopo Mondi, linux-media,
	imx, linux-arm-kernel, linux-kernel

On Mon, Aug 18, 2025 at 02:22:34PM +0800, Guoniu Zhou wrote:
> 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?

Reviewed-by: Frank Li <Frank.Li@nxp.com>

> Signed-off-by: Guoniu Zhou <guoniu.zhou@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@nxp.com>
>


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-08-18 17:33 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-18  6:22 [PATCH] media: nxp: imx8-isi: Fix streamon/streamoff calls are imbalanced issue Guoniu Zhou
2025-08-18 15:53 ` Frank Li

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).