CC: l...@lists.linux.dev CC: kbuild-...@lists.01.org BCC: l...@intel.com CC: Linux Memory Management List <linux...@kvack.org> TO: Luben Tuikov <luben.tui...@amd.com> CC: Alex Deucher <alexander.deuc...@amd.com>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: a32cd981a6da2373c093d471ee4405a915e217d5 commit: a6c40b178092f41b9d6cc8615697c14b1e5a1c3a [5182/12845] drm/amdgpu: Show IP discovery in sysfs :::::: branch date: 6 hours ago :::::: commit date: 4 weeks ago config: riscv-randconfig-c006-20220310 (https://download.01.org/0day-ci/archive/20220316/202203160354.uzsrifrq-...@intel.com/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 276ca87382b8f16a65bddac700202924228982f6) 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=a6c40b178092f41b9d6cc8615697c14b1e5a1c3a 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 a6c40b178092f41b9d6cc8615697c14b1e5a1c3a # 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 <l...@intel.com> clang-analyzer warnings: (new ones prefixed by >>) ^~~~ drivers/nvmem/core.c:1481:2: note: Taking false branch if (!buf) ^ drivers/nvmem/core.c:1484:7: note: Calling '__nvmem_cell_read' rc = __nvmem_cell_read(nvmem, cell->entry, buf, len, cell->id); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/nvmem/core.c:1441:6: note: Assuming 'rc' is not equal to 0 if (rc) ^~ drivers/nvmem/core.c:1441:2: note: Taking true branch if (rc) ^ drivers/nvmem/core.c:1484:7: note: Returning from '__nvmem_cell_read' rc = __nvmem_cell_read(nvmem, cell->entry, buf, len, cell->id); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/nvmem/core.c:1485:6: note: 'rc' is not equal to 0 if (rc) { ^~ drivers/nvmem/core.c:1485:2: note: Taking true branch if (rc) { ^ drivers/nvmem/core.c:1691:8: note: Returning from 'nvmem_cell_read' buf = nvmem_cell_read(cell, len); ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/nvmem/core.c:1693:6: note: Calling 'IS_ERR' if (IS_ERR(buf)) ^~~~~~~~~~~ include/linux/err.h:36:9: note: Assuming the condition is false return IS_ERR_VALUE((unsigned long)ptr); ^ include/linux/err.h:22:34: note: expanded from macro 'IS_ERR_VALUE' #define IS_ERR_VALUE(x) unlikely((unsigned long)(void *)(x) >= (unsigned long)-MAX_ERRNO) ~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/compiler.h:78:42: note: expanded from macro 'unlikely' # define unlikely(x) __builtin_expect(!!(x), 0) ^ include/linux/err.h:36:2: note: Returning zero, which participates in a condition later return IS_ERR_VALUE((unsigned long)ptr); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/nvmem/core.c:1693:6: note: Returning from 'IS_ERR' if (IS_ERR(buf)) ^~~~~~~~~~~ drivers/nvmem/core.c:1693:2: note: Taking false branch if (IS_ERR(buf)) ^ drivers/nvmem/core.c:1700:6: note: Assuming 'nbits' is 0 if (nbits) ^~~~~ drivers/nvmem/core.c:1700:2: note: Taking false branch if (nbits) ^ drivers/nvmem/core.c:1703:11: note: The left operand of '>' is a garbage value if (*len > max_len) { ~~~~ ^ Suppressed 4 warnings (4 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. 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. 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. 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. >> drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c:718:4: warning: Value stored >> to 'res' is never read [clang-analyzer-deadcode.DeadStores] res = kobject_add(&ip_hw_instance->kobj, NULL, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c:718:4: note: Value stored to 'res' is never read res = kobject_add(&ip_hw_instance->kobj, NULL, ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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. 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. 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. 10 warnings generated. drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu8_smumgr.c:96:2: warning: Value stored to 'elapsed_us' is never read [clang-analyzer-deadcode.DeadStores] elapsed_us = ktime_us_delta(ktime_get(), t_start); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/../pm/powerplay/smumgr/smu8_smumgr.c:96:2: note: Value stored to 'elapsed_us' is never read elapsed_us = ktime_us_delta(ktime_get(), t_start); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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. 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. 18 warnings generated. drivers/gpu/drm/radeon/si.c:1814:4: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores] err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:1814:4: note: Value stored to 'err' is never read err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:1837:4: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores] err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:1837:4: note: Value stored to 'err' is never read err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:1860:4: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores] err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:1860:4: note: Value stored to 'err' is never read err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:1891:4: warning: Value stored to 'err' is never read [clang-analyzer-deadcode.DeadStores] err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:1891:4: note: Value stored to 'err' is never read err = -EINVAL; ^ ~~~~~~~ drivers/gpu/drm/radeon/si.c:3613:3: warning: Value stored to 'r' is never read [clang-analyzer-deadcode.DeadStores] r = radeon_ring_lock(rdev, ring, 2); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/radeon/si.c:3613:3: note: Value stored to 'r' is never read r = radeon_ring_lock(rdev, ring, 2); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/radeon/si.c:3956:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores] tmp = RREG32(GRBM_SOFT_RESET); ^ drivers/gpu/drm/radeon/si.c:3956:3: note: Value stored to 'tmp' is never read drivers/gpu/drm/radeon/si.c:3970:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores] tmp = RREG32(SRBM_SOFT_RESET); ^ drivers/gpu/drm/radeon/si.c:3970:3: note: Value stored to 'tmp' is never read drivers/gpu/drm/radeon/si.c:5155:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores] tmp = RREG32(DB_DEPTH_INFO); ^ drivers/gpu/drm/radeon/si.c:5155:3: note: Value stored to 'tmp' is never read drivers/gpu/drm/radeon/si.c:5270:3: warning: Value stored to 'tmp' is never read [clang-analyzer-deadcode.DeadStores] tmp = RREG32(DB_RENDER_CONTROL); ^ drivers/gpu/drm/radeon/si.c:5270:3: note: Value stored to 'tmp' is never read drivers/gpu/drm/radeon/si.c:5396:10: warning: Although the value stored to 'data' is used in the enclosing expression, the value is never actually read from 'data' [clang-analyzer-deadcode.DeadStores] orig = data = RREG32(CGTS_SM_CTRL_REG); ^ drivers/gpu/drm/radeon/si.c:5396:10: note: Although the value stored to 'data' is used in the enclosing expression, the value is never actually read from 'data' drivers/gpu/drm/radeon/si.c:5554:11: warning: Although the value stored to 'data' is used in the enclosing expression, the value is never actually read from 'data' [clang-analyzer-deadcode.DeadStores] orig = data = RREG32(DMA_CLK_CTRL + offset); ^ drivers/gpu/drm/radeon/si.c:5554:11: note: Although the value stored to 'data' is used in the enclosing expression, the value is never actually read from 'data' drivers/gpu/drm/radeon/si.c:6824:22: warning: Value stored to 'ring' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; ^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/radeon/si.c:6824:22: note: Value stored to 'ring' during its initialization is never read struct radeon_ring *ring = &rdev->ring[RADEON_RING_TYPE_GFX_INDEX]; ^~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Suppressed 6 warnings (6 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. Suppressed 4 warnings (4 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. Suppressed 4 warnings (4 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. Suppressed 4 warnings (4 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 +/res +718 drivers/gpu/drm/amd/amdgpu/amdgpu_discovery.c a6c40b178092f41 Luben Tuikov 2022-02-03 639 a6c40b178092f41 Luben Tuikov 2022-02-03 640 static int amdgpu_discovery_sysfs_ips(struct amdgpu_device *adev, a6c40b178092f41 Luben Tuikov 2022-02-03 641 struct ip_die_entry *ip_die_entry, a6c40b178092f41 Luben Tuikov 2022-02-03 642 const size_t _ip_offset, const int num_ips) a6c40b178092f41 Luben Tuikov 2022-02-03 643 { a6c40b178092f41 Luben Tuikov 2022-02-03 644 int ii, jj, kk, res; a6c40b178092f41 Luben Tuikov 2022-02-03 645 a6c40b178092f41 Luben Tuikov 2022-02-03 646 DRM_DEBUG("num_ips:%d", num_ips); a6c40b178092f41 Luben Tuikov 2022-02-03 647 a6c40b178092f41 Luben Tuikov 2022-02-03 648 /* Find all IPs of a given HW ID, and add their instance to a6c40b178092f41 Luben Tuikov 2022-02-03 649 * #die/#hw_id/#instance/<attributes> a6c40b178092f41 Luben Tuikov 2022-02-03 650 */ a6c40b178092f41 Luben Tuikov 2022-02-03 651 for (ii = 0; ii < HW_ID_MAX; ii++) { a6c40b178092f41 Luben Tuikov 2022-02-03 652 struct ip_hw_id *ip_hw_id = NULL; a6c40b178092f41 Luben Tuikov 2022-02-03 653 size_t ip_offset = _ip_offset; a6c40b178092f41 Luben Tuikov 2022-02-03 654 a6c40b178092f41 Luben Tuikov 2022-02-03 655 for (jj = 0; jj < num_ips; jj++) { a6c40b178092f41 Luben Tuikov 2022-02-03 656 struct ip *ip; a6c40b178092f41 Luben Tuikov 2022-02-03 657 struct ip_hw_instance *ip_hw_instance; a6c40b178092f41 Luben Tuikov 2022-02-03 658 a6c40b178092f41 Luben Tuikov 2022-02-03 659 ip = (struct ip *)(adev->mman.discovery_bin + ip_offset); a6c40b178092f41 Luben Tuikov 2022-02-03 660 if (amdgpu_discovery_validate_ip(ip) || a6c40b178092f41 Luben Tuikov 2022-02-03 661 le16_to_cpu(ip->hw_id) != ii) a6c40b178092f41 Luben Tuikov 2022-02-03 662 goto next_ip; a6c40b178092f41 Luben Tuikov 2022-02-03 663 a6c40b178092f41 Luben Tuikov 2022-02-03 664 DRM_DEBUG("match:%d @ ip_offset:%ld", ii, ip_offset); a6c40b178092f41 Luben Tuikov 2022-02-03 665 a6c40b178092f41 Luben Tuikov 2022-02-03 666 /* We have a hw_id match; register the hw a6c40b178092f41 Luben Tuikov 2022-02-03 667 * block if not yet registered. a6c40b178092f41 Luben Tuikov 2022-02-03 668 */ a6c40b178092f41 Luben Tuikov 2022-02-03 669 if (!ip_hw_id) { a6c40b178092f41 Luben Tuikov 2022-02-03 670 ip_hw_id = kzalloc(sizeof(*ip_hw_id), GFP_KERNEL); a6c40b178092f41 Luben Tuikov 2022-02-03 671 if (!ip_hw_id) a6c40b178092f41 Luben Tuikov 2022-02-03 672 return -ENOMEM; a6c40b178092f41 Luben Tuikov 2022-02-03 673 ip_hw_id->hw_id = ii; a6c40b178092f41 Luben Tuikov 2022-02-03 674 a6c40b178092f41 Luben Tuikov 2022-02-03 675 kobject_set_name(&ip_hw_id->hw_id_kset.kobj, "%d", ii); a6c40b178092f41 Luben Tuikov 2022-02-03 676 ip_hw_id->hw_id_kset.kobj.kset = &ip_die_entry->ip_kset; a6c40b178092f41 Luben Tuikov 2022-02-03 677 ip_hw_id->hw_id_kset.kobj.ktype = &ip_hw_id_ktype; a6c40b178092f41 Luben Tuikov 2022-02-03 678 res = kset_register(&ip_hw_id->hw_id_kset); a6c40b178092f41 Luben Tuikov 2022-02-03 679 if (res) { a6c40b178092f41 Luben Tuikov 2022-02-03 680 DRM_ERROR("Couldn't register ip_hw_id kset"); a6c40b178092f41 Luben Tuikov 2022-02-03 681 kfree(ip_hw_id); a6c40b178092f41 Luben Tuikov 2022-02-03 682 return res; a6c40b178092f41 Luben Tuikov 2022-02-03 683 } a6c40b178092f41 Luben Tuikov 2022-02-03 684 if (hw_id_names[ii]) { a6c40b178092f41 Luben Tuikov 2022-02-03 685 res = sysfs_create_link(&ip_die_entry->ip_kset.kobj, a6c40b178092f41 Luben Tuikov 2022-02-03 686 &ip_hw_id->hw_id_kset.kobj, a6c40b178092f41 Luben Tuikov 2022-02-03 687 hw_id_names[ii]); a6c40b178092f41 Luben Tuikov 2022-02-03 688 if (res) { a6c40b178092f41 Luben Tuikov 2022-02-03 689 DRM_ERROR("Couldn't create IP link %s in IP Die:%s\n", a6c40b178092f41 Luben Tuikov 2022-02-03 690 hw_id_names[ii], a6c40b178092f41 Luben Tuikov 2022-02-03 691 kobject_name(&ip_die_entry->ip_kset.kobj)); a6c40b178092f41 Luben Tuikov 2022-02-03 692 } a6c40b178092f41 Luben Tuikov 2022-02-03 693 } a6c40b178092f41 Luben Tuikov 2022-02-03 694 } a6c40b178092f41 Luben Tuikov 2022-02-03 695 a6c40b178092f41 Luben Tuikov 2022-02-03 696 /* Now register its instance. a6c40b178092f41 Luben Tuikov 2022-02-03 697 */ a6c40b178092f41 Luben Tuikov 2022-02-03 698 ip_hw_instance = kzalloc(struct_size(ip_hw_instance, a6c40b178092f41 Luben Tuikov 2022-02-03 699 base_addr, a6c40b178092f41 Luben Tuikov 2022-02-03 700 ip->num_base_address), a6c40b178092f41 Luben Tuikov 2022-02-03 701 GFP_KERNEL); a6c40b178092f41 Luben Tuikov 2022-02-03 702 if (!ip_hw_instance) { a6c40b178092f41 Luben Tuikov 2022-02-03 703 DRM_ERROR("no memory for ip_hw_instance"); a6c40b178092f41 Luben Tuikov 2022-02-03 704 return -ENOMEM; a6c40b178092f41 Luben Tuikov 2022-02-03 705 } a6c40b178092f41 Luben Tuikov 2022-02-03 706 ip_hw_instance->hw_id = le16_to_cpu(ip->hw_id); /* == ii */ a6c40b178092f41 Luben Tuikov 2022-02-03 707 ip_hw_instance->num_instance = ip->number_instance; a6c40b178092f41 Luben Tuikov 2022-02-03 708 ip_hw_instance->major = ip->major; a6c40b178092f41 Luben Tuikov 2022-02-03 709 ip_hw_instance->minor = ip->minor; a6c40b178092f41 Luben Tuikov 2022-02-03 710 ip_hw_instance->revision = ip->revision; a6c40b178092f41 Luben Tuikov 2022-02-03 711 ip_hw_instance->num_base_addresses = ip->num_base_address; a6c40b178092f41 Luben Tuikov 2022-02-03 712 a6c40b178092f41 Luben Tuikov 2022-02-03 713 for (kk = 0; kk < ip_hw_instance->num_base_addresses; kk++) a6c40b178092f41 Luben Tuikov 2022-02-03 714 ip_hw_instance->base_addr[kk] = ip->base_address[kk]; a6c40b178092f41 Luben Tuikov 2022-02-03 715 a6c40b178092f41 Luben Tuikov 2022-02-03 716 kobject_init(&ip_hw_instance->kobj, &ip_hw_instance_ktype); a6c40b178092f41 Luben Tuikov 2022-02-03 717 ip_hw_instance->kobj.kset = &ip_hw_id->hw_id_kset; a6c40b178092f41 Luben Tuikov 2022-02-03 @718 res = kobject_add(&ip_hw_instance->kobj, NULL, a6c40b178092f41 Luben Tuikov 2022-02-03 719 "%d", ip_hw_instance->num_instance); a6c40b178092f41 Luben Tuikov 2022-02-03 720 next_ip: a6c40b178092f41 Luben Tuikov 2022-02-03 721 ip_offset += sizeof(*ip) + 4 * (ip->num_base_address - 1); a6c40b178092f41 Luben Tuikov 2022-02-03 722 } a6c40b178092f41 Luben Tuikov 2022-02-03 723 } a6c40b178092f41 Luben Tuikov 2022-02-03 724 a6c40b178092f41 Luben Tuikov 2022-02-03 725 return 0; a6c40b178092f41 Luben Tuikov 2022-02-03 726 } a6c40b178092f41 Luben Tuikov 2022-02-03 727 --- 0-DAY CI Kernel Test Service https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org _______________________________________________ kbuild mailing list -- kbuild@lists.01.org To unsubscribe send an email to kbuild-le...@lists.01.org