CC: [email protected] CC: [email protected] CC: [email protected] TO: Felix Kuehling <[email protected]> CC: Alex Deucher <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: c741e49150dbb0c0aebe234389f4aa8b47958fa8 commit: c780b2eedbd0ddc9f594379fd39281100693fd3d drm/amdgpu: Rename kfd_bo_va_list to kfd_mem_attachment date: 7 months ago :::::: branch date: 5 hours ago :::::: commit date: 7 months ago config: x86_64-randconfig-c007-20211208 (https://download.01.org/0day-ci/archive/20211210/[email protected]/config) compiler: clang version 14.0.0 (https://github.com/llvm/llvm-project 097a1cb1d5ebb3a0ec4bcaed8ba3ff6a8e33c00a) 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 # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c780b2eedbd0ddc9f594379fd39281100693fd3d git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git git fetch --no-tags linus master git checkout c780b2eedbd0ddc9f594379fd39281100693fd3d # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 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 >>) ^ drivers/base/core.c:2561:17: note: Passing null pointer value via 1st parameter 'list' list_move_tail(&deva->kobj.entry, &devb->kobj.entry); ^~~~~~~~~~~~~~~~~ drivers/base/core.c:2561:2: note: Calling 'list_move_tail' list_move_tail(&deva->kobj.entry, &devb->kobj.entry); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:227:19: note: Passing null pointer value via 1st parameter 'entry' __list_del_entry(list); ^~~~ include/linux/list.h:227:2: note: Calling '__list_del_entry' __list_del_entry(list); ^~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:132:6: note: Assuming the condition is false if (!__list_del_entry_valid(entry)) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ include/linux/list.h:132:2: note: Taking false branch if (!__list_del_entry_valid(entry)) ^ include/linux/list.h:135:13: note: Access to field 'prev' results in a dereference of a null pointer (loaded from variable 'entry') __list_del(entry->prev, entry->next); ^~~~~ 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/usb/gadget/udc/udc-xilinx.c:632:3: warning: Value stored to 'bufferspace' is never read [clang-analyzer-deadcode.DeadStores] bufferspace -= count; ^ ~~~~~ drivers/usb/gadget/udc/udc-xilinx.c:632:3: note: Value stored to 'bufferspace' is never read bufferspace -= count; ^ ~~~~~ drivers/usb/gadget/udc/udc-xilinx.c:1136:19: warning: Value stored to 'req' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct xusb_req *req = to_xusb_req(_req); ^~~ drivers/usb/gadget/udc/udc-xilinx.c:1136:19: note: Value stored to 'req' during its initialization is never read struct xusb_req *req = to_xusb_req(_req); ^~~ 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. 10 warnings generated. drivers/usb/gadget/udc/bdc/bdc_ep.c:224:17: warning: Although the value stored to 'dma_last_bd' is used in the enclosing expression, the value is never actually read from 'dma_last_bd' [clang-analyzer-deadcode.DeadStores] dma_first_bd = dma_last_bd = 0; ^ ~ drivers/usb/gadget/udc/bdc/bdc_ep.c:224:17: note: Although the value stored to 'dma_last_bd' is used in the enclosing expression, the value is never actually read from 'dma_last_bd' dma_first_bd = dma_last_bd = 0; ^ ~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:2: warning: Value stored to 'available1' is never read [clang-analyzer-deadcode.DeadStores] available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:2: note: Value stored to 'available1' is never read available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:15: warning: Although the value stored to 'available2' is used in the enclosing expression, the value is never actually read from 'available2' [clang-analyzer-deadcode.DeadStores] available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:15: note: Although the value stored to 'available2' is used in the enclosing expression, the value is never actually read from 'available2' available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:28: warning: Although the value stored to 'chain_bd1' is used in the enclosing expression, the value is never actually read from 'chain_bd1' [clang-analyzer-deadcode.DeadStores] available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~~~~~~~~~~~~~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:28: note: Although the value stored to 'chain_bd1' is used in the enclosing expression, the value is never actually read from 'chain_bd1' available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~~~~~~~~~~~~~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:40: warning: Although the value stored to 'chain_bd2' is used in the enclosing expression, the value is never actually read from 'chain_bd2' [clang-analyzer-deadcode.DeadStores] available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~ drivers/usb/gadget/udc/bdc/bdc_ep.c:296:40: note: Although the value stored to 'chain_bd2' is used in the enclosing expression, the value is never actually read from 'chain_bd2' available1 = available2 = chain_bd1 = chain_bd2 = 0; ^ ~ drivers/usb/gadget/udc/bdc/bdc_ep.c:564:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = 0; ^ ~ drivers/usb/gadget/udc/bdc/bdc_ep.c:564:2: note: Value stored to 'ret' is never read ret = 0; ^ ~ drivers/usb/gadget/udc/bdc/bdc_ep.c:568:2: warning: Value stored to 'ret' is never read [clang-analyzer-deadcode.DeadStores] ret = bdc_stop_ep(bdc, ep->ep_num); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/usb/gadget/udc/bdc/bdc_ep.c:568:2: note: Value stored to 'ret' is never read ret = bdc_stop_ep(bdc, ep->ep_num); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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. 10 warnings generated. drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:281:14: warning: Although the value stored to 'k' is used in the enclosing expression, the value is never actually read from 'k' [clang-analyzer-deadcode.DeadStores] for (i = j, k = 0; i < old->shared_count; ++i) { ^ ~ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:281:14: note: Although the value stored to 'k' is used in the enclosing expression, the value is never actually read from 'k' for (i = j, k = 0; i < old->shared_count; ++i) { ^ ~ >> drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:1405:2: warning: Value >> stored to 'bo_size' is never read [clang-analyzer-deadcode.DeadStores] bo_size = bo->tbo.base.size; ^ ~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:1405:2: note: Value stored to 'bo_size' is never read bo_size = bo->tbo.base.size; ^ ~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:1508:16: warning: Value stored to 'bo_size' during its initialization is never read [clang-analyzer-deadcode.DeadStores] unsigned long bo_size = mem->bo->tbo.base.size; ^~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c:1508:16: note: Value stored to 'bo_size' during its initialization is never read unsigned long bo_size = mem->bo->tbo.base.size; ^~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~ 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. 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. Suppressed 4 warnings (3 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. 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. lib/rhashtable.c:792:21: warning: Value stored to 'p' during its initialization is never read [clang-analyzer-deadcode.DeadStores] struct rhash_head *p = iter->p; ^ ~~~~~~~ lib/rhashtable.c:792:21: note: Value stored to 'p' during its initialization is never read struct rhash_head *p = iter->p; ^ ~~~~~~~ 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. 10 warnings generated. drivers/regulator/core.c:3693:3: warning: Value stored to 'possible_uV' is never read [clang-analyzer-deadcode.DeadStores] possible_uV = desired_min_uV; ^ ~~~~~~~~~~~~~~ drivers/regulator/core.c:3693:3: note: Value stored to 'possible_uV' is never read possible_uV = desired_min_uV; ^ ~~~~~~~~~~~~~~ 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. 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. vim +/bo_size +1405 drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c a46a2cd103a863 Felix Kuehling 2018-02-06 1364 a46a2cd103a863 Felix Kuehling 2018-02-06 1365 int amdgpu_amdkfd_gpuvm_map_memory_to_gpu( b40a6ab2cf9213 Felix Kuehling 2021-04-07 1366 struct kgd_dev *kgd, struct kgd_mem *mem, void *drm_priv) a46a2cd103a863 Felix Kuehling 2018-02-06 1367 { a46a2cd103a863 Felix Kuehling 2018-02-06 1368 struct amdgpu_device *adev = get_amdgpu_device(kgd); b40a6ab2cf9213 Felix Kuehling 2021-04-07 1369 struct amdgpu_vm *avm = drm_priv_to_vm(drm_priv); a46a2cd103a863 Felix Kuehling 2018-02-06 1370 int ret; a46a2cd103a863 Felix Kuehling 2018-02-06 1371 struct amdgpu_bo *bo; a46a2cd103a863 Felix Kuehling 2018-02-06 1372 uint32_t domain; c780b2eedbd0dd Felix Kuehling 2021-04-08 1373 struct kfd_mem_attachment *entry; a46a2cd103a863 Felix Kuehling 2018-02-06 1374 struct bo_vm_reservation_context ctx; c780b2eedbd0dd Felix Kuehling 2021-04-08 1375 struct kfd_mem_attachment *attachment = NULL; c780b2eedbd0dd Felix Kuehling 2021-04-08 1376 struct kfd_mem_attachment *attachment_aql = NULL; a46a2cd103a863 Felix Kuehling 2018-02-06 1377 unsigned long bo_size; 5ae0283e831a94 Felix Kuehling 2018-03-23 1378 bool is_invalid_userptr = false; a46a2cd103a863 Felix Kuehling 2018-02-06 1379 a46a2cd103a863 Felix Kuehling 2018-02-06 1380 bo = mem->bo; a46a2cd103a863 Felix Kuehling 2018-02-06 1381 if (!bo) { a46a2cd103a863 Felix Kuehling 2018-02-06 1382 pr_err("Invalid BO when mapping memory to GPU\n"); 5ae0283e831a94 Felix Kuehling 2018-03-23 1383 return -EINVAL; 5ae0283e831a94 Felix Kuehling 2018-03-23 1384 } 5ae0283e831a94 Felix Kuehling 2018-03-23 1385 5ae0283e831a94 Felix Kuehling 2018-03-23 1386 /* Make sure restore is not running concurrently. Since we 5ae0283e831a94 Felix Kuehling 2018-03-23 1387 * don't map invalid userptr BOs, we rely on the next restore 5ae0283e831a94 Felix Kuehling 2018-03-23 1388 * worker to do the mapping 5ae0283e831a94 Felix Kuehling 2018-03-23 1389 */ 5ae0283e831a94 Felix Kuehling 2018-03-23 1390 mutex_lock(&mem->process_info->lock); 5ae0283e831a94 Felix Kuehling 2018-03-23 1391 5ae0283e831a94 Felix Kuehling 2018-03-23 1392 /* Lock mmap-sem. If we find an invalid userptr BO, we can be 5ae0283e831a94 Felix Kuehling 2018-03-23 1393 * sure that the MMU notifier is no longer running 5ae0283e831a94 Felix Kuehling 2018-03-23 1394 * concurrently and the queues are actually stopped 5ae0283e831a94 Felix Kuehling 2018-03-23 1395 */ 5ae0283e831a94 Felix Kuehling 2018-03-23 1396 if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm)) { d8ed45c5dcd455 Michel Lespinasse 2020-06-08 1397 mmap_write_lock(current->mm); 5ae0283e831a94 Felix Kuehling 2018-03-23 1398 is_invalid_userptr = atomic_read(&mem->invalid); d8ed45c5dcd455 Michel Lespinasse 2020-06-08 1399 mmap_write_unlock(current->mm); a46a2cd103a863 Felix Kuehling 2018-02-06 1400 } a46a2cd103a863 Felix Kuehling 2018-02-06 1401 5ae0283e831a94 Felix Kuehling 2018-03-23 1402 mutex_lock(&mem->lock); 5ae0283e831a94 Felix Kuehling 2018-03-23 1403 a46a2cd103a863 Felix Kuehling 2018-02-06 1404 domain = mem->domain; 8c392cd5f1c638 Daniel Vetter 2020-12-14 @1405 bo_size = bo->tbo.base.size; a46a2cd103a863 Felix Kuehling 2018-02-06 1406 a46a2cd103a863 Felix Kuehling 2018-02-06 1407 pr_debug("Map VA 0x%llx - 0x%llx to vm %p domain %s\n", a46a2cd103a863 Felix Kuehling 2018-02-06 1408 mem->va, a46a2cd103a863 Felix Kuehling 2018-02-06 1409 mem->va + bo_size * (1 + mem->aql_queue), b40a6ab2cf9213 Felix Kuehling 2021-04-07 1410 avm, domain_string(domain)); a46a2cd103a863 Felix Kuehling 2018-02-06 1411 b40a6ab2cf9213 Felix Kuehling 2021-04-07 1412 ret = reserve_bo_and_vm(mem, avm, &ctx); a46a2cd103a863 Felix Kuehling 2018-02-06 1413 if (unlikely(ret)) a46a2cd103a863 Felix Kuehling 2018-02-06 1414 goto out; a46a2cd103a863 Felix Kuehling 2018-02-06 1415 5ae0283e831a94 Felix Kuehling 2018-03-23 1416 /* Userptr can be marked as "not invalid", but not actually be 5ae0283e831a94 Felix Kuehling 2018-03-23 1417 * validated yet (still in the system domain). In that case 5ae0283e831a94 Felix Kuehling 2018-03-23 1418 * the queues are still stopped and we can leave mapping for 5ae0283e831a94 Felix Kuehling 2018-03-23 1419 * the next restore worker 5ae0283e831a94 Felix Kuehling 2018-03-23 1420 */ 0f04e538580c08 Felix Kuehling 2018-05-03 1421 if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm) && 0f04e538580c08 Felix Kuehling 2018-05-03 1422 bo->tbo.mem.mem_type == TTM_PL_SYSTEM) 5ae0283e831a94 Felix Kuehling 2018-03-23 1423 is_invalid_userptr = true; 5ae0283e831a94 Felix Kuehling 2018-03-23 1424 c780b2eedbd0dd Felix Kuehling 2021-04-08 1425 if (!kfd_mem_is_attached(avm, mem)) { c780b2eedbd0dd Felix Kuehling 2021-04-08 1426 ret = kfd_mem_attach(adev, mem, avm, false, &attachment); a46a2cd103a863 Felix Kuehling 2018-02-06 1427 if (ret) c780b2eedbd0dd Felix Kuehling 2021-04-08 1428 goto attach_failed; a46a2cd103a863 Felix Kuehling 2018-02-06 1429 if (mem->aql_queue) { c780b2eedbd0dd Felix Kuehling 2021-04-08 1430 ret = kfd_mem_attach(adev, mem, avm, true, c780b2eedbd0dd Felix Kuehling 2021-04-08 1431 &attachment_aql); a46a2cd103a863 Felix Kuehling 2018-02-06 1432 if (ret) c780b2eedbd0dd Felix Kuehling 2021-04-08 1433 goto attach_failed_aql; a46a2cd103a863 Felix Kuehling 2018-02-06 1434 } a46a2cd103a863 Felix Kuehling 2018-02-06 1435 } else { 5b21d3e5fd2110 Felix Kuehling 2018-03-15 1436 ret = vm_validate_pt_pd_bos(avm); a46a2cd103a863 Felix Kuehling 2018-02-06 1437 if (unlikely(ret)) c780b2eedbd0dd Felix Kuehling 2021-04-08 1438 goto attach_failed; a46a2cd103a863 Felix Kuehling 2018-02-06 1439 } a46a2cd103a863 Felix Kuehling 2018-02-06 1440 5ae0283e831a94 Felix Kuehling 2018-03-23 1441 if (mem->mapped_to_gpu_memory == 0 && 5ae0283e831a94 Felix Kuehling 2018-03-23 1442 !amdgpu_ttm_tt_get_usermm(bo->tbo.ttm)) { a46a2cd103a863 Felix Kuehling 2018-02-06 1443 /* Validate BO only once. The eviction fence gets added to BO a46a2cd103a863 Felix Kuehling 2018-02-06 1444 * the first time it is mapped. Validate will wait for all a46a2cd103a863 Felix Kuehling 2018-02-06 1445 * background evictions to complete. a46a2cd103a863 Felix Kuehling 2018-02-06 1446 */ a46a2cd103a863 Felix Kuehling 2018-02-06 1447 ret = amdgpu_amdkfd_bo_validate(bo, domain, true); a46a2cd103a863 Felix Kuehling 2018-02-06 1448 if (ret) { a46a2cd103a863 Felix Kuehling 2018-02-06 1449 pr_debug("Validate failed\n"); a46a2cd103a863 Felix Kuehling 2018-02-06 1450 goto map_bo_to_gpuvm_failed; a46a2cd103a863 Felix Kuehling 2018-02-06 1451 } a46a2cd103a863 Felix Kuehling 2018-02-06 1452 } a46a2cd103a863 Felix Kuehling 2018-02-06 1453 c780b2eedbd0dd Felix Kuehling 2021-04-08 1454 list_for_each_entry(entry, &mem->attachments, list) { c780b2eedbd0dd Felix Kuehling 2021-04-08 1455 if (entry->bo_va->base.vm != avm || entry->is_mapped) c780b2eedbd0dd Felix Kuehling 2021-04-08 1456 continue; c780b2eedbd0dd Felix Kuehling 2021-04-08 1457 a46a2cd103a863 Felix Kuehling 2018-02-06 1458 pr_debug("\t map VA 0x%llx - 0x%llx in entry %p\n", c780b2eedbd0dd Felix Kuehling 2021-04-08 1459 entry->va, entry->va + bo_size, entry); a46a2cd103a863 Felix Kuehling 2018-02-06 1460 5ae0283e831a94 Felix Kuehling 2018-03-23 1461 ret = map_bo_to_gpuvm(adev, entry, ctx.sync, 5ae0283e831a94 Felix Kuehling 2018-03-23 1462 is_invalid_userptr); a46a2cd103a863 Felix Kuehling 2018-02-06 1463 if (ret) { 0d87c9cfc08e15 Kent Russell 2019-05-01 1464 pr_err("Failed to map bo to gpuvm\n"); a46a2cd103a863 Felix Kuehling 2018-02-06 1465 goto map_bo_to_gpuvm_failed; a46a2cd103a863 Felix Kuehling 2018-02-06 1466 } a46a2cd103a863 Felix Kuehling 2018-02-06 1467 b40a6ab2cf9213 Felix Kuehling 2021-04-07 1468 ret = vm_update_pds(avm, ctx.sync); a46a2cd103a863 Felix Kuehling 2018-02-06 1469 if (ret) { a46a2cd103a863 Felix Kuehling 2018-02-06 1470 pr_err("Failed to update page directories\n"); a46a2cd103a863 Felix Kuehling 2018-02-06 1471 goto map_bo_to_gpuvm_failed; a46a2cd103a863 Felix Kuehling 2018-02-06 1472 } a46a2cd103a863 Felix Kuehling 2018-02-06 1473 a46a2cd103a863 Felix Kuehling 2018-02-06 1474 entry->is_mapped = true; a46a2cd103a863 Felix Kuehling 2018-02-06 1475 mem->mapped_to_gpu_memory++; a46a2cd103a863 Felix Kuehling 2018-02-06 1476 pr_debug("\t INC mapping count %d\n", a46a2cd103a863 Felix Kuehling 2018-02-06 1477 mem->mapped_to_gpu_memory); a46a2cd103a863 Felix Kuehling 2018-02-06 1478 } a46a2cd103a863 Felix Kuehling 2018-02-06 1479 4671078eb8e390 Christian König 2020-09-21 1480 if (!amdgpu_ttm_tt_get_usermm(bo->tbo.ttm) && !bo->tbo.pin_count) a46a2cd103a863 Felix Kuehling 2018-02-06 1481 amdgpu_bo_fence(bo, 5b21d3e5fd2110 Felix Kuehling 2018-03-15 1482 &avm->process_info->eviction_fence->base, a46a2cd103a863 Felix Kuehling 2018-02-06 1483 true); a46a2cd103a863 Felix Kuehling 2018-02-06 1484 ret = unreserve_bo_and_vms(&ctx, false, false); a46a2cd103a863 Felix Kuehling 2018-02-06 1485 a46a2cd103a863 Felix Kuehling 2018-02-06 1486 goto out; a46a2cd103a863 Felix Kuehling 2018-02-06 1487 a46a2cd103a863 Felix Kuehling 2018-02-06 1488 map_bo_to_gpuvm_failed: c780b2eedbd0dd Felix Kuehling 2021-04-08 1489 if (attachment_aql) c780b2eedbd0dd Felix Kuehling 2021-04-08 1490 kfd_mem_detach(attachment_aql); c780b2eedbd0dd Felix Kuehling 2021-04-08 1491 attach_failed_aql: c780b2eedbd0dd Felix Kuehling 2021-04-08 1492 if (attachment) c780b2eedbd0dd Felix Kuehling 2021-04-08 1493 kfd_mem_detach(attachment); c780b2eedbd0dd Felix Kuehling 2021-04-08 1494 attach_failed: a46a2cd103a863 Felix Kuehling 2018-02-06 1495 unreserve_bo_and_vms(&ctx, false, false); a46a2cd103a863 Felix Kuehling 2018-02-06 1496 out: a46a2cd103a863 Felix Kuehling 2018-02-06 1497 mutex_unlock(&mem->process_info->lock); a46a2cd103a863 Felix Kuehling 2018-02-06 1498 mutex_unlock(&mem->lock); a46a2cd103a863 Felix Kuehling 2018-02-06 1499 return ret; a46a2cd103a863 Felix Kuehling 2018-02-06 1500 } a46a2cd103a863 Felix Kuehling 2018-02-06 1501 :::::: The code at line 1405 was first introduced by commit :::::: 8c392cd5f1c638f953ebf2c6f4baca9df9e699f4 drm/amdkfd: fix ttm size refactor fallout :::::: TO: Daniel Vetter <[email protected]> :::::: CC: Daniel Vetter <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
