From: kernel test robot <lkp@intel.com>
To: Zack Rusin <zack.rusin@broadcom.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Martin Krastev <martin.krastev@broadcom.com>
Subject: drivers/gpu/drm/vmwgfx/vmwgfx_blit.c:533:2-8: WARNING: NULL check before some freeing functions is not needed.
Date: Sun, 8 Sep 2024 06:30:14 +0800 [thread overview]
Message-ID: <202409080613.QLumunSL-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: b31c4492884252a8360f312a0ac2049349ddf603
commit: b32233accefff1338806f064fb9b62cf5bc0609f drm/vmwgfx: Fix prime import/export
date: 5 months ago
config: i386-randconfig-054-20240907 (https://download.01.org/0day-ci/archive/20240908/202409080613.QLumunSL-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409080613.QLumunSL-lkp@intel.com/
cocci warnings: (new ones prefixed by >>)
>> drivers/gpu/drm/vmwgfx/vmwgfx_blit.c:533:2-8: WARNING: NULL check before some freeing functions is not needed.
drivers/gpu/drm/vmwgfx/vmwgfx_blit.c:535:2-8: WARNING: NULL check before some freeing functions is not needed.
vim +533 drivers/gpu/drm/vmwgfx/vmwgfx_blit.c
422
423 /**
424 * vmw_bo_cpu_blit - in-kernel cpu blit.
425 *
426 * @dst: Destination buffer object.
427 * @dst_offset: Destination offset of blit start in bytes.
428 * @dst_stride: Destination stride in bytes.
429 * @src: Source buffer object.
430 * @src_offset: Source offset of blit start in bytes.
431 * @src_stride: Source stride in bytes.
432 * @w: Width of blit.
433 * @h: Height of blit.
434 * @diff: The struct vmw_diff_cpy used to track the modified bounding box.
435 * return: Zero on success. Negative error value on failure. Will print out
436 * kernel warnings on caller bugs.
437 *
438 * Performs a CPU blit from one buffer object to another avoiding a full
439 * bo vmap which may exhaust- or fragment vmalloc space.
440 * On supported architectures (x86), we're using kmap_atomic which avoids
441 * cross-processor TLB- and cache flushes and may, on non-HIGHMEM systems
442 * reference already set-up mappings.
443 *
444 * Neither of the buffer objects may be placed in PCI memory
445 * (Fixed memory in TTM terminology) when using this function.
446 */
447 int vmw_bo_cpu_blit(struct ttm_buffer_object *dst,
448 u32 dst_offset, u32 dst_stride,
449 struct ttm_buffer_object *src,
450 u32 src_offset, u32 src_stride,
451 u32 w, u32 h,
452 struct vmw_diff_cpy *diff)
453 {
454 struct ttm_operation_ctx ctx = {
455 .interruptible = false,
456 .no_wait_gpu = false
457 };
458 u32 j, initial_line = dst_offset / dst_stride;
459 struct vmw_bo_blit_line_data d = {0};
460 int ret = 0;
461 struct page **dst_pages = NULL;
462 struct page **src_pages = NULL;
463
464 /* Buffer objects need to be either pinned or reserved: */
465 if (!(dst->pin_count))
466 dma_resv_assert_held(dst->base.resv);
467 if (!(src->pin_count))
468 dma_resv_assert_held(src->base.resv);
469
470 if (!ttm_tt_is_populated(dst->ttm)) {
471 ret = dst->bdev->funcs->ttm_tt_populate(dst->bdev, dst->ttm, &ctx);
472 if (ret)
473 return ret;
474 }
475
476 if (!ttm_tt_is_populated(src->ttm)) {
477 ret = src->bdev->funcs->ttm_tt_populate(src->bdev, src->ttm, &ctx);
478 if (ret)
479 return ret;
480 }
481
482 if (!src->ttm->pages && src->ttm->sg) {
483 src_pages = kvmalloc_array(src->ttm->num_pages,
484 sizeof(struct page *), GFP_KERNEL);
485 if (!src_pages)
486 return -ENOMEM;
487 ret = drm_prime_sg_to_page_array(src->ttm->sg, src_pages,
488 src->ttm->num_pages);
489 if (ret)
490 goto out;
491 }
492 if (!dst->ttm->pages && dst->ttm->sg) {
493 dst_pages = kvmalloc_array(dst->ttm->num_pages,
494 sizeof(struct page *), GFP_KERNEL);
495 if (!dst_pages) {
496 ret = -ENOMEM;
497 goto out;
498 }
499 ret = drm_prime_sg_to_page_array(dst->ttm->sg, dst_pages,
500 dst->ttm->num_pages);
501 if (ret)
502 goto out;
503 }
504
505 d.mapped_dst = 0;
506 d.mapped_src = 0;
507 d.dst_addr = NULL;
508 d.src_addr = NULL;
509 d.dst_pages = dst->ttm->pages ? dst->ttm->pages : dst_pages;
510 d.src_pages = src->ttm->pages ? src->ttm->pages : src_pages;
511 d.dst_num_pages = PFN_UP(dst->resource->size);
512 d.src_num_pages = PFN_UP(src->resource->size);
513 d.dst_prot = ttm_io_prot(dst, dst->resource, PAGE_KERNEL);
514 d.src_prot = ttm_io_prot(src, src->resource, PAGE_KERNEL);
515 d.diff = diff;
516
517 for (j = 0; j < h; ++j) {
518 diff->line = j + initial_line;
519 diff->line_offset = dst_offset % dst_stride;
520 ret = vmw_bo_cpu_blit_line(&d, dst_offset, src_offset, w);
521 if (ret)
522 goto out;
523
524 dst_offset += dst_stride;
525 src_offset += src_stride;
526 }
527 out:
528 if (d.src_addr)
529 kunmap_atomic(d.src_addr);
530 if (d.dst_addr)
531 kunmap_atomic(d.dst_addr);
532 if (src_pages)
> 533 kvfree(src_pages);
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2024-09-07 22:30 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202409080613.QLumunSL-lkp@intel.com \
--to=lkp@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.krastev@broadcom.com \
--cc=oe-kbuild-all@lists.linux.dev \
--cc=zack.rusin@broadcom.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.