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, &regs[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, &regs[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]

Attachment: .config.gz
Description: application/gzip

_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to