Hi, Le jeudi 13 avril 2023 à 10:10 -0300, Ezequiel Garcia a écrit : > Benjamin, > > Please include the crash stracktrace in the commit. > > Careful with HTML message, they don't always make it in these ML and tooling might not play well with the tooling. Perhaps it can be edited while pulling ? Here's the info from Marek's bug report: hantro-vpu fdea0000.video-codec: Adding to iommu group 0 hantro-vpu fdea0000.video-codec: registered rockchip,rk3568-vpu-dec as /dev/video0 hantro-vpu fdee0000.video-codec: Adding to iommu group 1 hantro-vpu fdee0000.video-codec: registered rockchip,rk3568-vepu-enc as /dev/video1 Unable to handle kernel NULL pointer dereference at virtual address 0000000000000008 Mem abort info: ESR = 0x0000000096000004 EC = 0x25: DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0 FSC = 0x04: level 0 translation fault Data abort info: ISV = 0, ISS = 0x00000004 CM = 0, WnR = 0 user pgtable: 4k pages, 48-bit VAs, pgdp=00000001f446f000 [0000000000000008] pgd=0000000000000000, p4d=0000000000000000 Internal error: Oops: 0000000096000004 [#1] PREEMPT SMP Modules linked in: hantro_vpu v4l2_vp9 v4l2_h264 v4l2_mem2mem videobuf2_dma_contig snd_soc_simple_card display_connector snd_soc_simple_card_utils videobuf2_memops crct10dif_ce dwmac_rk rockchip_thermal videobuf2_v4l2 stmmac_platform rockchip_saradc industrialio_triggered_buffer kfifo_buf stmmac videodev pcs_xpcs rtc_rk808 videobuf2_common rockchipdrm panfrost mc drm_shmem_helper analogix_dp gpu_sched dw_mipi_dsi dw_hdmi drm_display_helper ip_tables x_tables ipv6 CPU: 3 PID: 171 Comm: v4l_id Not tainted 6.3.0-rc2+ #13478 Hardware name: Hardkernel ODROID-M1 (DT) pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) pc : hantro_try_fmt+0xb4/0x280 [hantro_vpu] lr : hantro_try_fmt+0xa8/0x280 [hantro_vpu] ... Call trace: hantro_try_fmt+0xb4/0x280 [hantro_vpu] hantro_set_fmt_out+0x3c/0x278 [hantro_vpu] hantro_reset_raw_fmt+0x94/0xb4 [hantro_vpu] hantro_set_fmt_cap+0x23c/0x250 [hantro_vpu] hantro_reset_fmts+0x94/0xcc [hantro_vpu] hantro_open+0xd4/0x20c [hantro_vpu] v4l2_open+0x80/0x120 [videodev] chrdev_open+0xc0/0x22c do_dentry_open+0x13c/0x490 vfs_open+0x2c/0x38 path_openat+0x550/0x938 do_filp_open+0x80/0x12c do_sys_openat2+0xb4/0x16c __arm64_sys_openat+0x64/0xac invoke_syscall+0x48/0x114 el0_svc_common.constprop.0+0xfc/0x11c do_el0_svc+0x38/0xa4 el0_svc+0x48/0xb8 el0t_64_sync_handler+0xb8/0xbc el0t_64_sync+0x190/0x194 Code: 97fe726c f940aa80 52864a61 72a686c1 (b9400800) ---[ end trace 0000000000000000 ]--- > > Thanks, > Ezequiel > > > On Thu, Apr 13, 2023 at 7:48 AM Benjamin Gaignard > <benjamin.gaignard@xxxxxxxxxxxxx> wrote: > > ctx->vpu_dst_fmt is no more initialized before calling hantro_try_fmt() > > so assigne it to vpu_fmt led to crash the kernel. > > Like for decoder case use 'fmt' as format for encoder and clean up > > the code. > > > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@xxxxxxxxxxxxx> > > Tested-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> > > Fixes: db6f68b51e5c ("media: verisilicon: Do not set context src/dst formats > > in reset functions") > > --- > > version 2: > > - Remove useless vpu_fmt. > > > > drivers/media/platform/verisilicon/hantro_v4l2.c | 10 +++------- > > 1 file changed, 3 insertions(+), 7 deletions(-) > > > > diff --git a/drivers/media/platform/verisilicon/hantro_v4l2.c > > b/drivers/media/platform/verisilicon/hantro_v4l2.c > > index 8f1414085f47..d71f79471396 100644 > > --- a/drivers/media/platform/verisilicon/hantro_v4l2.c > > +++ b/drivers/media/platform/verisilicon/hantro_v4l2.c > > @@ -275,7 +275,7 @@ static int hantro_try_fmt(const struct hantro_ctx *ctx, > > struct v4l2_pix_format_mplane *pix_mp, > > enum v4l2_buf_type type) > > { > > - const struct hantro_fmt *fmt, *vpu_fmt; > > + const struct hantro_fmt *fmt; > > bool capture = V4L2_TYPE_IS_CAPTURE(type); > > bool coded; > > > > @@ -295,11 +295,7 @@ static int hantro_try_fmt(const struct hantro_ctx *ctx, > > > > if (coded) { > > pix_mp->num_planes = 1; > > - vpu_fmt = fmt; > > - } else if (ctx->is_encoder) { > > - vpu_fmt = ctx->vpu_dst_fmt; > > - } else { > > - vpu_fmt = fmt; > > + } else if (!ctx->is_encoder) { > > /* > > * Width/height on the CAPTURE end of a decoder are ignored > > and > > * replaced by the OUTPUT ones. > > @@ -311,7 +307,7 @@ static int hantro_try_fmt(const struct hantro_ctx *ctx, > > pix_mp->field = V4L2_FIELD_NONE; > > > > v4l2_apply_frmsize_constraints(&pix_mp->width, &pix_mp->height, > > - &vpu_fmt->frmsize); > > + &fmt->frmsize); > > > > if (!coded) { > > /* Fill remaining fields */