CC: [email protected] CC: [email protected] CC: Linux Memory Management List <[email protected]> TO: Yunfei Dong <[email protected]> CC: Mauro Carvalho Chehab <[email protected]> CC: [email protected] CC: Alexandre Courbot <[email protected]> CC: "Tzung-Bi Shih" <[email protected]> CC: Hans Verkuil <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 7c832d2f9b959e3181370c8b0dacaf9efe13fc05 commit: fd00d90330d1d2a962d010fc93515e2d77739ad8 [4127/8410] media: mtk-vcodec: vdec: move stateful ops into their own file :::::: branch date: 2 days ago :::::: commit date: 2 weeks ago config: riscv-randconfig-c006-20211017 (attached as .config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 8ca4b3ef19fe82d7ad6a6e1515317dcc01b41515) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # install riscv cross compiling tool for clang build # apt-get install binutils-riscv64-linux-gnu # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=fd00d90330d1d2a962d010fc93515e2d77739ad8 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout fd00d90330d1d2a962d010fc93515e2d77739ad8 # save the attached .config to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) test_free_pages(&pages); ^~~~~~~~~~~~~~~~~~~~~~~ lib/test_lockup.c:323:2: note: Left side of '&&' is false list_for_each_entry_safe(page, next, pages, lru) ^ include/linux/list.h:715:13: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ include/linux/kernel.h:495:61: note: expanded from macro 'container_of' BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \ ^ lib/test_lockup.c:323:2: note: Taking false branch list_for_each_entry_safe(page, next, pages, lru) ^ include/linux/list.h:715:13: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:302:3: note: expanded from macro '__compiletime_assert' if (!(condition)) \ ^ lib/test_lockup.c:323:2: note: Loop condition is false. Exiting loop list_for_each_entry_safe(page, next, pages, lru) ^ include/linux/list.h:715:13: note: expanded from macro 'list_for_each_entry_safe' for (pos = list_first_entry(head, typeof(*pos), member), \ ^ include/linux/list.h:522:2: note: expanded from macro 'list_first_entry' list_entry((ptr)->next, type, member) ^ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^ note: (skipping 2 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all) include/linux/compiler_types.h:322:2: note: expanded from macro 'compiletime_assert' _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__) ^ include/linux/compiler_types.h:310:2: note: expanded from macro '_compiletime_assert' __compiletime_assert(condition, msg, prefix, suffix) ^ include/linux/compiler_types.h:300:2: note: expanded from macro '__compiletime_assert' do { \ ^ lib/test_lockup.c:323:2: note: Assigned value is garbage or undefined list_for_each_entry_safe(page, next, pages, lru) ^ include/linux/list.h:716:7: note: expanded from macro 'list_for_each_entry_safe' n = list_next_entry(pos, member); \ ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:555:2: note: expanded from macro 'list_next_entry' list_entry((pos)->member.next, typeof(*(pos)), member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:511:2: note: expanded from macro 'list_entry' container_of(ptr, type, member) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:494:2: note: expanded from macro 'container_of' void *__mptr = (void *)(ptr); \ ^ ~~~~~~~~~~~~~ Suppressed 9 warnings (9 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c:407:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = -EBUSY; ^ ~~~~~~ drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c:407:3: note: Value stored to 'ret' is never read ret = -EBUSY; ^ ~~~~~~ drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c:417:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = -EBUSY; ^ ~~~~~~ drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c:417:3: note: Value stored to 'ret' is never read ret = -EBUSY; ^ ~~~~~~ Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. >> drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c:342:3: warning: >> Value stored to 'src_buf' is never read [clang-analyzer-deadcode.DeadStores] src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c:342:3: note: Value stored to 'src_buf' is never read src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c:405:2: warning: >> Value stored to 'dst_buf' is never read [clang-analyzer-deadcode.DeadStores] dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c:405:2: note: Value stored to 'dst_buf' is never read dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. Suppressed 12 warnings (12 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 12 warnings generated. drivers/media/dvb-frontends/tda10048.c:493:3: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = 0; ^ ~ drivers/media/dvb-frontends/tda10048.c:493:3: note: Value stored to 'ret' is never read ret = 0; ^ ~ Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 14 warnings generated. drivers/media/dvb-frontends/cx24120.c:1225:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = cx24120_writereg(state, CX24120_REG_CLKDIV, state->dcur.clkdiv); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/dvb-frontends/cx24120.c:1225:2: note: Value stored to 'ret' is never read ret = cx24120_writereg(state, CX24120_REG_CLKDIV, state->dcur.clkdiv); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/dvb-frontends/cx24120.c:1229:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = cx24120_writereg(state, CX24120_REG_RATEDIV, ret); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/dvb-frontends/cx24120.c:1229:2: note: Value stored to 'ret' is never read ret = cx24120_writereg(state, CX24120_REG_RATEDIV, ret); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/dvb-frontends/cx24120.c:1471:24: warning: Value stored to 'state' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct cx24120_state *state = fe->demodulator_priv; ^~~~~ ~~~~~~~~~~~~~~~~~~~~ drivers/media/dvb-frontends/cx24120.c:1471:24: note: Value stored to 'state' during its initialization is never read struct cx24120_state *state = fe->demodulator_priv; ^~~~~ ~~~~~~~~~~~~~~~~~~~~ Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 13 warnings generated. drivers/media/dvb-frontends/si21xx.c:830:2: warning: Value stored to 'status' is never read [clang-analyzer-deadcode.DeadStores] status |= si21_writeregs(state, PLL_DIVISOR_REG, ®s[0], 0x04); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/media/dvb-frontends/si21xx.c:830:2: note: Value stored to 'status' is never read status |= si21_writeregs(state, PLL_DIVISOR_REG, ®s[0], 0x04); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 12 warnings (11 in non-user code, 1 with check filters). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. Suppressed 11 warnings (11 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. Suppressed 8 warnings (8 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 9 warnings generated. Suppressed 9 warnings (9 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 16 warnings generated. mm/debug_vm_pgtable.c:98:28: warning: Value stored to 'ptr' during its initialization is never read [clang-analyzer-deadcode.DeadStores] unsigned long val = idx, *ptr = &val; ^~~ ~~~~ mm/debug_vm_pgtable.c:98:28: note: Value stored to 'ptr' during its initialization is never read unsigned long val = idx, *ptr = &val; ^~~ ~~~~ mm/debug_vm_pgtable.c:178:8: warning: Value stored to 'pte' during its initialization is never read [clang-analyzer-deadcode.DeadStores] pte_t pte = pfn_pte(args->fixed_pte_pfn, args->page_prot_none); ^~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ mm/debug_vm_pgtable.c:178:8: note: Value stored to 'pte' during its initialization is never read pte_t pte = pfn_pte(args->fixed_pte_pfn, args->page_prot_none); vim +/src_buf +342 drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c fd00d90330d1d2 Yunfei Dong 2021-08-06 292 fd00d90330d1d2 Yunfei Dong 2021-08-06 293 static void mtk_vdec_worker(struct work_struct *work) fd00d90330d1d2 Yunfei Dong 2021-08-06 294 { fd00d90330d1d2 Yunfei Dong 2021-08-06 295 struct mtk_vcodec_ctx *ctx = fd00d90330d1d2 Yunfei Dong 2021-08-06 296 container_of(work, struct mtk_vcodec_ctx, decode_work); fd00d90330d1d2 Yunfei Dong 2021-08-06 297 struct mtk_vcodec_dev *dev = ctx->dev; fd00d90330d1d2 Yunfei Dong 2021-08-06 298 struct vb2_v4l2_buffer *src_buf, *dst_buf; fd00d90330d1d2 Yunfei Dong 2021-08-06 299 struct mtk_vcodec_mem buf; fd00d90330d1d2 Yunfei Dong 2021-08-06 300 struct vdec_fb *pfb; fd00d90330d1d2 Yunfei Dong 2021-08-06 301 bool res_chg = false; fd00d90330d1d2 Yunfei Dong 2021-08-06 302 int ret; fd00d90330d1d2 Yunfei Dong 2021-08-06 303 struct mtk_video_dec_buf *dst_buf_info, *src_buf_info; fd00d90330d1d2 Yunfei Dong 2021-08-06 304 fd00d90330d1d2 Yunfei Dong 2021-08-06 305 src_buf = v4l2_m2m_next_src_buf(ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 306 if (!src_buf) { fd00d90330d1d2 Yunfei Dong 2021-08-06 307 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 308 mtk_v4l2_debug(1, "[%d] src_buf empty!!", ctx->id); fd00d90330d1d2 Yunfei Dong 2021-08-06 309 return; fd00d90330d1d2 Yunfei Dong 2021-08-06 310 } fd00d90330d1d2 Yunfei Dong 2021-08-06 311 fd00d90330d1d2 Yunfei Dong 2021-08-06 312 dst_buf = v4l2_m2m_next_dst_buf(ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 313 if (!dst_buf) { fd00d90330d1d2 Yunfei Dong 2021-08-06 314 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 315 mtk_v4l2_debug(1, "[%d] dst_buf empty!!", ctx->id); fd00d90330d1d2 Yunfei Dong 2021-08-06 316 return; fd00d90330d1d2 Yunfei Dong 2021-08-06 317 } fd00d90330d1d2 Yunfei Dong 2021-08-06 318 fd00d90330d1d2 Yunfei Dong 2021-08-06 319 dst_buf_info = fd00d90330d1d2 Yunfei Dong 2021-08-06 320 container_of(dst_buf, struct mtk_video_dec_buf, m2m_buf.vb); fd00d90330d1d2 Yunfei Dong 2021-08-06 321 fd00d90330d1d2 Yunfei Dong 2021-08-06 322 pfb = &dst_buf_info->frame_buffer; fd00d90330d1d2 Yunfei Dong 2021-08-06 323 pfb->base_y.va = vb2_plane_vaddr(&dst_buf->vb2_buf, 0); fd00d90330d1d2 Yunfei Dong 2021-08-06 324 pfb->base_y.dma_addr = fd00d90330d1d2 Yunfei Dong 2021-08-06 325 vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0); fd00d90330d1d2 Yunfei Dong 2021-08-06 326 pfb->base_y.size = ctx->picinfo.fb_sz[0]; fd00d90330d1d2 Yunfei Dong 2021-08-06 327 fd00d90330d1d2 Yunfei Dong 2021-08-06 328 pfb->base_c.va = vb2_plane_vaddr(&dst_buf->vb2_buf, 1); fd00d90330d1d2 Yunfei Dong 2021-08-06 329 pfb->base_c.dma_addr = fd00d90330d1d2 Yunfei Dong 2021-08-06 330 vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 1); fd00d90330d1d2 Yunfei Dong 2021-08-06 331 pfb->base_c.size = ctx->picinfo.fb_sz[1]; fd00d90330d1d2 Yunfei Dong 2021-08-06 332 pfb->status = 0; fd00d90330d1d2 Yunfei Dong 2021-08-06 333 mtk_v4l2_debug(3, "===>[%d] vdec_if_decode() ===>", ctx->id); fd00d90330d1d2 Yunfei Dong 2021-08-06 334 fd00d90330d1d2 Yunfei Dong 2021-08-06 335 mtk_v4l2_debug(3, fd00d90330d1d2 Yunfei Dong 2021-08-06 336 "id=%d Framebuf pfb=%p VA=%p Y_DMA=%pad C_DMA=%pad Size=%zx", fd00d90330d1d2 Yunfei Dong 2021-08-06 337 dst_buf->vb2_buf.index, pfb, pfb->base_y.va, fd00d90330d1d2 Yunfei Dong 2021-08-06 338 &pfb->base_y.dma_addr, &pfb->base_c.dma_addr, pfb->base_y.size); fd00d90330d1d2 Yunfei Dong 2021-08-06 339 fd00d90330d1d2 Yunfei Dong 2021-08-06 340 if (src_buf == &ctx->empty_flush_buf.vb) { fd00d90330d1d2 Yunfei Dong 2021-08-06 341 mtk_v4l2_debug(1, "Got empty flush input buffer."); fd00d90330d1d2 Yunfei Dong 2021-08-06 @342 src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 343 fd00d90330d1d2 Yunfei Dong 2021-08-06 344 /* update dst buf status */ fd00d90330d1d2 Yunfei Dong 2021-08-06 345 dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 346 mutex_lock(&ctx->lock); fd00d90330d1d2 Yunfei Dong 2021-08-06 347 dst_buf_info->used = false; fd00d90330d1d2 Yunfei Dong 2021-08-06 348 mutex_unlock(&ctx->lock); fd00d90330d1d2 Yunfei Dong 2021-08-06 349 fd00d90330d1d2 Yunfei Dong 2021-08-06 350 vdec_if_decode(ctx, NULL, NULL, &res_chg); fd00d90330d1d2 Yunfei Dong 2021-08-06 351 clean_display_buffer(ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 352 vb2_set_plane_payload(&dst_buf->vb2_buf, 0, 0); fd00d90330d1d2 Yunfei Dong 2021-08-06 353 if (ctx->q_data[MTK_Q_DATA_DST].fmt->num_planes == 2) fd00d90330d1d2 Yunfei Dong 2021-08-06 354 vb2_set_plane_payload(&dst_buf->vb2_buf, 1, 0); fd00d90330d1d2 Yunfei Dong 2021-08-06 355 dst_buf->flags |= V4L2_BUF_FLAG_LAST; fd00d90330d1d2 Yunfei Dong 2021-08-06 356 v4l2_m2m_buf_done(dst_buf, VB2_BUF_STATE_DONE); fd00d90330d1d2 Yunfei Dong 2021-08-06 357 clean_free_buffer(ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 358 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 359 return; fd00d90330d1d2 Yunfei Dong 2021-08-06 360 } fd00d90330d1d2 Yunfei Dong 2021-08-06 361 fd00d90330d1d2 Yunfei Dong 2021-08-06 362 src_buf_info = fd00d90330d1d2 Yunfei Dong 2021-08-06 363 container_of(src_buf, struct mtk_video_dec_buf, m2m_buf.vb); fd00d90330d1d2 Yunfei Dong 2021-08-06 364 fd00d90330d1d2 Yunfei Dong 2021-08-06 365 buf.va = vb2_plane_vaddr(&src_buf->vb2_buf, 0); fd00d90330d1d2 Yunfei Dong 2021-08-06 366 buf.dma_addr = vb2_dma_contig_plane_dma_addr(&src_buf->vb2_buf, 0); fd00d90330d1d2 Yunfei Dong 2021-08-06 367 buf.size = (size_t)src_buf->vb2_buf.planes[0].bytesused; fd00d90330d1d2 Yunfei Dong 2021-08-06 368 if (!buf.va) { fd00d90330d1d2 Yunfei Dong 2021-08-06 369 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 370 mtk_v4l2_err("[%d] id=%d src_addr is NULL!!", ctx->id, fd00d90330d1d2 Yunfei Dong 2021-08-06 371 src_buf->vb2_buf.index); fd00d90330d1d2 Yunfei Dong 2021-08-06 372 return; fd00d90330d1d2 Yunfei Dong 2021-08-06 373 } fd00d90330d1d2 Yunfei Dong 2021-08-06 374 mtk_v4l2_debug(3, "[%d] Bitstream VA=%p DMA=%pad Size=%zx vb=%p", fd00d90330d1d2 Yunfei Dong 2021-08-06 375 ctx->id, buf.va, &buf.dma_addr, buf.size, src_buf); fd00d90330d1d2 Yunfei Dong 2021-08-06 376 dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp; fd00d90330d1d2 Yunfei Dong 2021-08-06 377 dst_buf->timecode = src_buf->timecode; fd00d90330d1d2 Yunfei Dong 2021-08-06 378 mutex_lock(&ctx->lock); fd00d90330d1d2 Yunfei Dong 2021-08-06 379 dst_buf_info->used = true; fd00d90330d1d2 Yunfei Dong 2021-08-06 380 mutex_unlock(&ctx->lock); fd00d90330d1d2 Yunfei Dong 2021-08-06 381 src_buf_info->used = true; fd00d90330d1d2 Yunfei Dong 2021-08-06 382 fd00d90330d1d2 Yunfei Dong 2021-08-06 383 ret = vdec_if_decode(ctx, &buf, pfb, &res_chg); fd00d90330d1d2 Yunfei Dong 2021-08-06 384 fd00d90330d1d2 Yunfei Dong 2021-08-06 385 if (ret) { fd00d90330d1d2 Yunfei Dong 2021-08-06 386 mtk_v4l2_err(" <===[%d], src_buf[%d] sz=0x%zx pts=%llu dst_buf[%d] vdec_if_decode() ret=%d res_chg=%d===>", fd00d90330d1d2 Yunfei Dong 2021-08-06 387 ctx->id, src_buf->vb2_buf.index, buf.size, fd00d90330d1d2 Yunfei Dong 2021-08-06 388 src_buf->vb2_buf.timestamp, dst_buf->vb2_buf.index, ret, res_chg); fd00d90330d1d2 Yunfei Dong 2021-08-06 389 src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 390 if (ret == -EIO) { fd00d90330d1d2 Yunfei Dong 2021-08-06 391 mutex_lock(&ctx->lock); fd00d90330d1d2 Yunfei Dong 2021-08-06 392 src_buf_info->error = true; fd00d90330d1d2 Yunfei Dong 2021-08-06 393 mutex_unlock(&ctx->lock); fd00d90330d1d2 Yunfei Dong 2021-08-06 394 } fd00d90330d1d2 Yunfei Dong 2021-08-06 395 v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_ERROR); fd00d90330d1d2 Yunfei Dong 2021-08-06 396 } else if (!res_chg) { fd00d90330d1d2 Yunfei Dong 2021-08-06 397 /* fd00d90330d1d2 Yunfei Dong 2021-08-06 398 * we only return src buffer with VB2_BUF_STATE_DONE fd00d90330d1d2 Yunfei Dong 2021-08-06 399 * when decode success without resolution change fd00d90330d1d2 Yunfei Dong 2021-08-06 400 */ fd00d90330d1d2 Yunfei Dong 2021-08-06 401 src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 402 v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE); fd00d90330d1d2 Yunfei Dong 2021-08-06 403 } fd00d90330d1d2 Yunfei Dong 2021-08-06 404 fd00d90330d1d2 Yunfei Dong 2021-08-06 @405 dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 406 clean_display_buffer(ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 407 clean_free_buffer(ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 408 fd00d90330d1d2 Yunfei Dong 2021-08-06 409 if (!ret && res_chg) { fd00d90330d1d2 Yunfei Dong 2021-08-06 410 mtk_vdec_pic_info_update(ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 411 /* fd00d90330d1d2 Yunfei Dong 2021-08-06 412 * On encountering a resolution change in the stream. fd00d90330d1d2 Yunfei Dong 2021-08-06 413 * The driver must first process and decode all fd00d90330d1d2 Yunfei Dong 2021-08-06 414 * remaining buffers from before the resolution change fd00d90330d1d2 Yunfei Dong 2021-08-06 415 * point, so call flush decode here fd00d90330d1d2 Yunfei Dong 2021-08-06 416 */ fd00d90330d1d2 Yunfei Dong 2021-08-06 417 mtk_vdec_flush_decoder(ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 418 /* fd00d90330d1d2 Yunfei Dong 2021-08-06 419 * After all buffers containing decoded frames from fd00d90330d1d2 Yunfei Dong 2021-08-06 420 * before the resolution change point ready to be fd00d90330d1d2 Yunfei Dong 2021-08-06 421 * dequeued on the CAPTURE queue, the driver sends a fd00d90330d1d2 Yunfei Dong 2021-08-06 422 * V4L2_EVENT_SOURCE_CHANGE event for source change fd00d90330d1d2 Yunfei Dong 2021-08-06 423 * type V4L2_EVENT_SRC_CH_RESOLUTION fd00d90330d1d2 Yunfei Dong 2021-08-06 424 */ fd00d90330d1d2 Yunfei Dong 2021-08-06 425 mtk_vdec_queue_res_chg_event(ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 426 } fd00d90330d1d2 Yunfei Dong 2021-08-06 427 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx); fd00d90330d1d2 Yunfei Dong 2021-08-06 428 } fd00d90330d1d2 Yunfei Dong 2021-08-06 429 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected]
.config.gz
Description: application/gzip
_______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
