* 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]
@ 2021-12-15 0:21 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-12-15 0:21 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 25675 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Yunfei Dong <yunfei.dong@mediatek.com>
CC: Mauro Carvalho Chehab <mchehab@kernel.org>
CC: linux-media(a)vger.kernel.org
CC: Alexandre Courbot <acourbot@chromium.org>
CC: "Tzung-Bi Shih" <tzungbi@google.com>
CC: Hans Verkuil <hverkuil@xs4all.nl>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 5472f14a37421d1bca3dddf33cabd3bd6dbefbbc
commit: fd00d90330d1d2a962d010fc93515e2d77739ad8 media: mtk-vcodec: vdec: move stateful ops into their own file
date: 3 months ago
:::::: branch date: 26 hours ago
:::::: commit date: 3 months ago
config: riscv-randconfig-c006-20211213 (https://download.01.org/0day-ci/archive/20211215/202112150808.bMnC6chn-lkp(a)intel.com/config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project b6a2ddb6c8ac29412b1361810972e15221fa021c)
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/torvalds/linux.git/commit/?id=fd00d90330d1d2a962d010fc93515e2d77739ad8
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout fd00d90330d1d2a962d010fc93515e2d77739ad8
# save the config file 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 <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
^
drivers/iio/adc/qcom-pm8xxx-xoadc.c:837:19: note: Calling 'devm_kcalloc'
adc->iio_chans = devm_kcalloc(adc->dev, adc->nchans,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:223:9: note: Calling 'devm_kmalloc_array'
return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:215:2: note: Taking false branch
if (unlikely(check_mul_overflow(n, size, &bytes)))
^
include/linux/device.h:218:2: note: Returning pointer, which participates in a condition later
return devm_kmalloc(dev, bytes, flags);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:223:9: note: Returning from 'devm_kmalloc_array'
return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:223:2: note: Returning pointer, which participates in a condition later
return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:837:19: note: Returning from 'devm_kcalloc'
adc->iio_chans = devm_kcalloc(adc->dev, adc->nchans,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:839:6: note: Assuming field 'iio_chans' is non-null
if (!adc->iio_chans)
^~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:839:2: note: Taking false branch
if (!adc->iio_chans)
^
drivers/iio/adc/qcom-pm8xxx-xoadc.c:842:15: note: Calling 'devm_kcalloc'
adc->chans = devm_kcalloc(adc->dev, adc->nchans,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:223:9: note: Calling 'devm_kmalloc_array'
return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:215:2: note: Taking false branch
if (unlikely(check_mul_overflow(n, size, &bytes)))
^
include/linux/device.h:218:2: note: Returning pointer, which participates in a condition later
return devm_kmalloc(dev, bytes, flags);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:223:9: note: Returning from 'devm_kmalloc_array'
return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/device.h:223:2: note: Returning pointer, which participates in a condition later
return devm_kmalloc_array(dev, n, size, flags | __GFP_ZERO);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:842:15: note: Returning from 'devm_kcalloc'
adc->chans = devm_kcalloc(adc->dev, adc->nchans,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:844:6: note: Assuming field 'chans' is non-null
if (!adc->chans)
^~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:844:2: note: Taking false branch
if (!adc->chans)
^
drivers/iio/adc/qcom-pm8xxx-xoadc.c:848:39: note: Assuming 'child' is not equal to null
for_each_available_child_of_node(np, child) {
^
include/linux/of.h:1304:58: note: expanded from macro 'for_each_available_child_of_node'
for (child = of_get_next_available_child(parent, NULL); child != NULL; \
^~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:848:2: note: Loop condition is true. Entering loop body
for_each_available_child_of_node(np, child) {
^
include/linux/of.h:1304:2: note: expanded from macro 'for_each_available_child_of_node'
for (child = of_get_next_available_child(parent, NULL); child != NULL; \
^
drivers/iio/adc/qcom-pm8xxx-xoadc.c:851:8: note: Passing value via 3rd parameter 'hw_channels'
adc->variant->channels,
^~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:850:9: note: Calling 'pm8xxx_xoadc_parse_channel'
ret = pm8xxx_xoadc_parse_channel(adc->dev, child,
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:746:6: note: Assuming 'ret' is 0
if (ret) {
^~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:746:2: note: Taking false branch
if (ret) {
^
drivers/iio/adc/qcom-pm8xxx-xoadc.c:751:6: note: Assuming 'ret' is 0
if (ret) {
^~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:751:2: note: Taking false branch
if (ret) {
^
drivers/iio/adc/qcom-pm8xxx-xoadc.c:758:2: note: Value assigned to 'hwchan'
hwchan = &hw_channels[0];
^~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:759:9: note: Assuming 'hwchan' is null
while (hwchan && hwchan->datasheet_name) {
^~~~~~
drivers/iio/adc/qcom-pm8xxx-xoadc.c:759:16: note: Left side of '&&' is false
while (hwchan && hwchan->datasheet_name) {
^
drivers/iio/adc/qcom-pm8xxx-xoadc.c:767:7: note: Access to field 'datasheet_name' results in a dereference of a null pointer (loaded from variable 'hwchan')
if (!hwchan->datasheet_name) {
^~~~~~
Suppressed 7 warnings (7 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.
>> 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 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.
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.
10 warnings generated.
Suppressed 10 warnings (10 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.
10 warnings generated.
Suppressed 10 warnings (10 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.
10 warnings generated.
Suppressed 10 warnings (10 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.
7 warnings generated.
Suppressed 7 warnings (7 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.
4 warnings generated.
drivers/iio/imu/fxos8700_core.c:167:8: warning: Excessive padding in 'struct fxos8700_data' (106 padding bytes, where 42 is optimal).
Optimal fields order:
buf,
regmap,
trig,
consider reordering the fields or adding explicit padding members [clang-analyzer-optin.performance.Padding]
struct fxos8700_data {
~~~~~~~^~~~~~~~~~~~~~~
drivers/iio/imu/fxos8700_core.c:167:8: note: Excessive padding in 'struct fxos8700_data' (106 padding bytes, where 42 is optimal). Optimal fields order: buf, regmap, trig, consider reordering the fields or adding explicit padding members
struct fxos8700_data {
~~~~~~~^~~~~~~~~~~~~~~
Suppressed 3 warnings (3 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.
7 warnings generated.
Suppressed 7 warnings (7 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.
7 warnings generated.
Suppressed 7 warnings (7 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.
drivers/iio/light/adux1020.c:384:9: warning: Assigned value is garbage or undefined [clang-analyzer-core.uninitialized.Assign]
*val = buf[0];
^ ~~~~~~
drivers/iio/light/adux1020.c:372:2: note: Control jumps to 'case IIO_CHAN_INFO_RAW:' at line 373
switch (mask) {
^
drivers/iio/light/adux1020.c:374:3: note: Control jumps to 'case IIO_PROXIMITY:' at line 375
switch (chan->type) {
^
drivers/iio/light/adux1020.c:377:8: note: 'ret' is >= 0
if (ret < 0)
^~~
drivers/iio/light/adux1020.c:377:4: note: Taking false branch
if (ret < 0)
^
drivers/iio/light/adux1020.c:380:10: note: Calling 'adux1020_measure'
ret = adux1020_measure(data, ADUX1020_MODE_PROX_I, buf);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/light/adux1020.c:320:6: note: Assuming 'ret' is >= 0
if (ret < 0)
^~~~~~~
drivers/iio/light/adux1020.c:320:2: note: Taking false branch
if (ret < 0)
^
drivers/iio/light/adux1020.c:327:6: note: Assuming 'ret' is >= 0
if (ret < 0)
^~~~~~~
drivers/iio/light/adux1020.c:327:2: note: Taking false branch
if (ret < 0)
^
drivers/iio/light/adux1020.c:330:2: note: Loop condition is true. Entering loop body
while (tries--) {
^
drivers/iio/light/adux1020.c:333:7: note: Assuming 'ret' is >= 0
if (ret < 0)
^~~~~~~
drivers/iio/light/adux1020.c:333:3: note: Taking false branch
if (ret < 0)
^
drivers/iio/light/adux1020.c:337:7: note: Assuming 'status' is >= field 'bytes'
if (status >= adux1020_modes[mode].bytes)
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/iio/light/adux1020.c:337:3: note: Taking true branch
if (status >= adux1020_modes[mode].bytes)
^
drivers/iio/light/adux1020.c:338:4: note: Execution continues on line 342
break;
^
drivers/iio/light/adux1020.c:342:6: note: 'tries' is >= 0
if (tries < 0)
^~~~~
vim +/src_buf +342 drivers/media/platform/mtk-vcodec/mtk_vcodec_dec_stateful.c
fd00d90330d1d2a Yunfei Dong 2021-08-06 292
fd00d90330d1d2a Yunfei Dong 2021-08-06 293 static void mtk_vdec_worker(struct work_struct *work)
fd00d90330d1d2a Yunfei Dong 2021-08-06 294 {
fd00d90330d1d2a Yunfei Dong 2021-08-06 295 struct mtk_vcodec_ctx *ctx =
fd00d90330d1d2a Yunfei Dong 2021-08-06 296 container_of(work, struct mtk_vcodec_ctx, decode_work);
fd00d90330d1d2a Yunfei Dong 2021-08-06 297 struct mtk_vcodec_dev *dev = ctx->dev;
fd00d90330d1d2a Yunfei Dong 2021-08-06 298 struct vb2_v4l2_buffer *src_buf, *dst_buf;
fd00d90330d1d2a Yunfei Dong 2021-08-06 299 struct mtk_vcodec_mem buf;
fd00d90330d1d2a Yunfei Dong 2021-08-06 300 struct vdec_fb *pfb;
fd00d90330d1d2a Yunfei Dong 2021-08-06 301 bool res_chg = false;
fd00d90330d1d2a Yunfei Dong 2021-08-06 302 int ret;
fd00d90330d1d2a Yunfei Dong 2021-08-06 303 struct mtk_video_dec_buf *dst_buf_info, *src_buf_info;
fd00d90330d1d2a Yunfei Dong 2021-08-06 304
fd00d90330d1d2a Yunfei Dong 2021-08-06 305 src_buf = v4l2_m2m_next_src_buf(ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 306 if (!src_buf) {
fd00d90330d1d2a Yunfei Dong 2021-08-06 307 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 308 mtk_v4l2_debug(1, "[%d] src_buf empty!!", ctx->id);
fd00d90330d1d2a Yunfei Dong 2021-08-06 309 return;
fd00d90330d1d2a Yunfei Dong 2021-08-06 310 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 311
fd00d90330d1d2a Yunfei Dong 2021-08-06 312 dst_buf = v4l2_m2m_next_dst_buf(ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 313 if (!dst_buf) {
fd00d90330d1d2a Yunfei Dong 2021-08-06 314 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 315 mtk_v4l2_debug(1, "[%d] dst_buf empty!!", ctx->id);
fd00d90330d1d2a Yunfei Dong 2021-08-06 316 return;
fd00d90330d1d2a Yunfei Dong 2021-08-06 317 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 318
fd00d90330d1d2a Yunfei Dong 2021-08-06 319 dst_buf_info =
fd00d90330d1d2a Yunfei Dong 2021-08-06 320 container_of(dst_buf, struct mtk_video_dec_buf, m2m_buf.vb);
fd00d90330d1d2a Yunfei Dong 2021-08-06 321
fd00d90330d1d2a Yunfei Dong 2021-08-06 322 pfb = &dst_buf_info->frame_buffer;
fd00d90330d1d2a Yunfei Dong 2021-08-06 323 pfb->base_y.va = vb2_plane_vaddr(&dst_buf->vb2_buf, 0);
fd00d90330d1d2a Yunfei Dong 2021-08-06 324 pfb->base_y.dma_addr =
fd00d90330d1d2a Yunfei Dong 2021-08-06 325 vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 0);
fd00d90330d1d2a Yunfei Dong 2021-08-06 326 pfb->base_y.size = ctx->picinfo.fb_sz[0];
fd00d90330d1d2a Yunfei Dong 2021-08-06 327
fd00d90330d1d2a Yunfei Dong 2021-08-06 328 pfb->base_c.va = vb2_plane_vaddr(&dst_buf->vb2_buf, 1);
fd00d90330d1d2a Yunfei Dong 2021-08-06 329 pfb->base_c.dma_addr =
fd00d90330d1d2a Yunfei Dong 2021-08-06 330 vb2_dma_contig_plane_dma_addr(&dst_buf->vb2_buf, 1);
fd00d90330d1d2a Yunfei Dong 2021-08-06 331 pfb->base_c.size = ctx->picinfo.fb_sz[1];
fd00d90330d1d2a Yunfei Dong 2021-08-06 332 pfb->status = 0;
fd00d90330d1d2a Yunfei Dong 2021-08-06 333 mtk_v4l2_debug(3, "===>[%d] vdec_if_decode() ===>", ctx->id);
fd00d90330d1d2a Yunfei Dong 2021-08-06 334
fd00d90330d1d2a Yunfei Dong 2021-08-06 335 mtk_v4l2_debug(3,
fd00d90330d1d2a Yunfei Dong 2021-08-06 336 "id=%d Framebuf pfb=%p VA=%p Y_DMA=%pad C_DMA=%pad Size=%zx",
fd00d90330d1d2a Yunfei Dong 2021-08-06 337 dst_buf->vb2_buf.index, pfb, pfb->base_y.va,
fd00d90330d1d2a Yunfei Dong 2021-08-06 338 &pfb->base_y.dma_addr, &pfb->base_c.dma_addr, pfb->base_y.size);
fd00d90330d1d2a Yunfei Dong 2021-08-06 339
fd00d90330d1d2a Yunfei Dong 2021-08-06 340 if (src_buf == &ctx->empty_flush_buf.vb) {
fd00d90330d1d2a Yunfei Dong 2021-08-06 341 mtk_v4l2_debug(1, "Got empty flush input buffer.");
fd00d90330d1d2a Yunfei Dong 2021-08-06 @342 src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 343
fd00d90330d1d2a Yunfei Dong 2021-08-06 344 /* update dst buf status */
fd00d90330d1d2a Yunfei Dong 2021-08-06 345 dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 346 mutex_lock(&ctx->lock);
fd00d90330d1d2a Yunfei Dong 2021-08-06 347 dst_buf_info->used = false;
fd00d90330d1d2a Yunfei Dong 2021-08-06 348 mutex_unlock(&ctx->lock);
fd00d90330d1d2a Yunfei Dong 2021-08-06 349
fd00d90330d1d2a Yunfei Dong 2021-08-06 350 vdec_if_decode(ctx, NULL, NULL, &res_chg);
fd00d90330d1d2a Yunfei Dong 2021-08-06 351 clean_display_buffer(ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 352 vb2_set_plane_payload(&dst_buf->vb2_buf, 0, 0);
fd00d90330d1d2a Yunfei Dong 2021-08-06 353 if (ctx->q_data[MTK_Q_DATA_DST].fmt->num_planes == 2)
fd00d90330d1d2a Yunfei Dong 2021-08-06 354 vb2_set_plane_payload(&dst_buf->vb2_buf, 1, 0);
fd00d90330d1d2a Yunfei Dong 2021-08-06 355 dst_buf->flags |= V4L2_BUF_FLAG_LAST;
fd00d90330d1d2a Yunfei Dong 2021-08-06 356 v4l2_m2m_buf_done(dst_buf, VB2_BUF_STATE_DONE);
fd00d90330d1d2a Yunfei Dong 2021-08-06 357 clean_free_buffer(ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 358 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 359 return;
fd00d90330d1d2a Yunfei Dong 2021-08-06 360 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 361
fd00d90330d1d2a Yunfei Dong 2021-08-06 362 src_buf_info =
fd00d90330d1d2a Yunfei Dong 2021-08-06 363 container_of(src_buf, struct mtk_video_dec_buf, m2m_buf.vb);
fd00d90330d1d2a Yunfei Dong 2021-08-06 364
fd00d90330d1d2a Yunfei Dong 2021-08-06 365 buf.va = vb2_plane_vaddr(&src_buf->vb2_buf, 0);
fd00d90330d1d2a Yunfei Dong 2021-08-06 366 buf.dma_addr = vb2_dma_contig_plane_dma_addr(&src_buf->vb2_buf, 0);
fd00d90330d1d2a Yunfei Dong 2021-08-06 367 buf.size = (size_t)src_buf->vb2_buf.planes[0].bytesused;
fd00d90330d1d2a Yunfei Dong 2021-08-06 368 if (!buf.va) {
fd00d90330d1d2a Yunfei Dong 2021-08-06 369 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 370 mtk_v4l2_err("[%d] id=%d src_addr is NULL!!", ctx->id,
fd00d90330d1d2a Yunfei Dong 2021-08-06 371 src_buf->vb2_buf.index);
fd00d90330d1d2a Yunfei Dong 2021-08-06 372 return;
fd00d90330d1d2a Yunfei Dong 2021-08-06 373 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 374 mtk_v4l2_debug(3, "[%d] Bitstream VA=%p DMA=%pad Size=%zx vb=%p",
fd00d90330d1d2a Yunfei Dong 2021-08-06 375 ctx->id, buf.va, &buf.dma_addr, buf.size, src_buf);
fd00d90330d1d2a Yunfei Dong 2021-08-06 376 dst_buf->vb2_buf.timestamp = src_buf->vb2_buf.timestamp;
fd00d90330d1d2a Yunfei Dong 2021-08-06 377 dst_buf->timecode = src_buf->timecode;
fd00d90330d1d2a Yunfei Dong 2021-08-06 378 mutex_lock(&ctx->lock);
fd00d90330d1d2a Yunfei Dong 2021-08-06 379 dst_buf_info->used = true;
fd00d90330d1d2a Yunfei Dong 2021-08-06 380 mutex_unlock(&ctx->lock);
fd00d90330d1d2a Yunfei Dong 2021-08-06 381 src_buf_info->used = true;
fd00d90330d1d2a Yunfei Dong 2021-08-06 382
fd00d90330d1d2a Yunfei Dong 2021-08-06 383 ret = vdec_if_decode(ctx, &buf, pfb, &res_chg);
fd00d90330d1d2a Yunfei Dong 2021-08-06 384
fd00d90330d1d2a Yunfei Dong 2021-08-06 385 if (ret) {
fd00d90330d1d2a 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===>",
fd00d90330d1d2a Yunfei Dong 2021-08-06 387 ctx->id, src_buf->vb2_buf.index, buf.size,
fd00d90330d1d2a Yunfei Dong 2021-08-06 388 src_buf->vb2_buf.timestamp, dst_buf->vb2_buf.index, ret, res_chg);
fd00d90330d1d2a Yunfei Dong 2021-08-06 389 src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 390 if (ret == -EIO) {
fd00d90330d1d2a Yunfei Dong 2021-08-06 391 mutex_lock(&ctx->lock);
fd00d90330d1d2a Yunfei Dong 2021-08-06 392 src_buf_info->error = true;
fd00d90330d1d2a Yunfei Dong 2021-08-06 393 mutex_unlock(&ctx->lock);
fd00d90330d1d2a Yunfei Dong 2021-08-06 394 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 395 v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_ERROR);
fd00d90330d1d2a Yunfei Dong 2021-08-06 396 } else if (!res_chg) {
fd00d90330d1d2a Yunfei Dong 2021-08-06 397 /*
fd00d90330d1d2a Yunfei Dong 2021-08-06 398 * we only return src buffer with VB2_BUF_STATE_DONE
fd00d90330d1d2a Yunfei Dong 2021-08-06 399 * when decode success without resolution change
fd00d90330d1d2a Yunfei Dong 2021-08-06 400 */
fd00d90330d1d2a Yunfei Dong 2021-08-06 401 src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 402 v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_DONE);
fd00d90330d1d2a Yunfei Dong 2021-08-06 403 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 404
fd00d90330d1d2a Yunfei Dong 2021-08-06 @405 dst_buf = v4l2_m2m_dst_buf_remove(ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 406 clean_display_buffer(ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 407 clean_free_buffer(ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 408
fd00d90330d1d2a Yunfei Dong 2021-08-06 409 if (!ret && res_chg) {
fd00d90330d1d2a Yunfei Dong 2021-08-06 410 mtk_vdec_pic_info_update(ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 411 /*
fd00d90330d1d2a Yunfei Dong 2021-08-06 412 * On encountering a resolution change in the stream.
fd00d90330d1d2a Yunfei Dong 2021-08-06 413 * The driver must first process and decode all
fd00d90330d1d2a Yunfei Dong 2021-08-06 414 * remaining buffers from before the resolution change
fd00d90330d1d2a Yunfei Dong 2021-08-06 415 * point, so call flush decode here
fd00d90330d1d2a Yunfei Dong 2021-08-06 416 */
fd00d90330d1d2a Yunfei Dong 2021-08-06 417 mtk_vdec_flush_decoder(ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 418 /*
fd00d90330d1d2a Yunfei Dong 2021-08-06 419 * After all buffers containing decoded frames from
fd00d90330d1d2a Yunfei Dong 2021-08-06 420 * before the resolution change point ready to be
fd00d90330d1d2a Yunfei Dong 2021-08-06 421 * dequeued on the CAPTURE queue, the driver sends a
fd00d90330d1d2a Yunfei Dong 2021-08-06 422 * V4L2_EVENT_SOURCE_CHANGE event for source change
fd00d90330d1d2a Yunfei Dong 2021-08-06 423 * type V4L2_EVENT_SRC_CH_RESOLUTION
fd00d90330d1d2a Yunfei Dong 2021-08-06 424 */
fd00d90330d1d2a Yunfei Dong 2021-08-06 425 mtk_vdec_queue_res_chg_event(ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 426 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 427 v4l2_m2m_job_finish(dev->m2m_dev_dec, ctx->m2m_ctx);
fd00d90330d1d2a Yunfei Dong 2021-08-06 428 }
fd00d90330d1d2a Yunfei Dong 2021-08-06 429
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
^ permalink raw reply [flat|nested] 2+ messages in thread* 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]
@ 2021-11-07 5:55 kernel test robot
0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2021-11-07 5:55 UTC (permalink / raw)
To: kbuild
[-- Attachment #1: Type: text/plain, Size: 27575 bytes --]
CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
CC: linux-kernel(a)vger.kernel.org
TO: Yunfei Dong <yunfei.dong@mediatek.com>
CC: Mauro Carvalho Chehab <mchehab@kernel.org>
CC: linux-media(a)vger.kernel.org
CC: Alexandre Courbot <acourbot@chromium.org>
CC: "Tzung-Bi Shih" <tzungbi@google.com>
CC: Hans Verkuil <hverkuil@xs4all.nl>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: b5013d084e03e82ceeab4db8ae8ceeaebe76b0eb
commit: fd00d90330d1d2a962d010fc93515e2d77739ad8 media: mtk-vcodec: vdec: move stateful ops into their own file
date: 5 weeks ago
:::::: branch date: 6 hours ago
:::::: commit date: 5 weeks ago
config: riscv-randconfig-c006-20211001 (attached as .config)
compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 962e503cc8bc411f7523cc393acae8aae425b1c4)
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/torvalds/linux.git/commit/?id=fd00d90330d1d2a962d010fc93515e2d77739ad8
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus 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 <lkp@intel.com>
clang-analyzer warnings: (new ones prefixed by >>)
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
5 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 3 warnings (3 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.
5 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 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
4 warnings generated.
drivers/media/v4l2-core/v4l2-ioctl.c:3286:3: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores]
err = -EFAULT;
^ ~~~~~~~
drivers/media/v4l2-core/v4l2-ioctl.c:3286:3: note: Value stored to 'err' is never read
err = -EFAULT;
^ ~~~~~~~
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
3 warnings generated.
Suppressed 3 warnings (3 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
2 warnings generated.
Suppressed 2 warnings (2 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.
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/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30915 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-12-15 0:21 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-12-15 0:21 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] kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2021-11-07 5:55 kernel test robot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.