* [radeon-alex:amd-mainline-dkms-4.15 1135/1759] drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1422 amdgpu_vm_bo_split_mapping() warn: if statement not indented
@ 2018-04-26 6:47 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2018-04-26 6:47 UTC (permalink / raw)
To: kbuild, Flora Cui; +Cc: Junwei Zhang, kbuild-all, dri-devel, Hawking Zhang
tree: git://people.freedesktop.org/~agd5f/linux.git amd-mainline-dkms-4.15
head: 9556f93f18f7923978fb90f860c107fed9ca7f57
commit: c756d628b20a12f50c43df1cfbe24fd72b5a47b4 [1135/1759] drm/amd/amdgpu: adapt dgma to the new vam_mgr
smatch warnings:
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1422 amdgpu_vm_bo_split_mapping() warn: if statement not indented
git remote add radeon-alex git://people.freedesktop.org/~agd5f/linux.git
git remote update radeon-alex
git checkout c756d628b20a12f50c43df1cfbe24fd72b5a47b4
vim +1422 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
d38ceaf9 Alex Deucher 2015-04-20 1344
d38ceaf9 Alex Deucher 2015-04-20 1345 /**
a14faa65 Christian König 2016-01-25 1346 * amdgpu_vm_bo_split_mapping - split a mapping into smaller chunks
a14faa65 Christian König 2016-01-25 1347 *
a14faa65 Christian König 2016-01-25 1348 * @adev: amdgpu_device pointer
3cabaa54 Christian König 2016-06-06 1349 * @exclusive: fence we need to sync to
8358dcee Christian König 2016-03-30 1350 * @pages_addr: DMA addresses to use for mapping
a14faa65 Christian König 2016-01-25 1351 * @vm: requested vm
a14faa65 Christian König 2016-01-25 1352 * @mapping: mapped range and flags to use for the update
8358dcee Christian König 2016-03-30 1353 * @flags: HW flags for the mapping
c756d628 Flora Cui 2016-10-10 1354 * @mem: ttm_mem_reg holding array of drm_mm_nodes with the MC addresses
a14faa65 Christian König 2016-01-25 1355 * @fence: optional resulting fence
a14faa65 Christian König 2016-01-25 1356 *
a14faa65 Christian König 2016-01-25 1357 * Split the mapping into smaller chunks so that each update fits
a14faa65 Christian König 2016-01-25 1358 * into a SDMA IB.
a14faa65 Christian König 2016-01-25 1359 * Returns 0 for success, -EINVAL for failure.
a14faa65 Christian König 2016-01-25 1360 */
a14faa65 Christian König 2016-01-25 1361 static int amdgpu_vm_bo_split_mapping(struct amdgpu_device *adev,
f54d1867 Chris Wilson 2016-10-25 1362 struct dma_fence *exclusive,
8358dcee Christian König 2016-03-30 1363 dma_addr_t *pages_addr,
a14faa65 Christian König 2016-01-25 1364 struct amdgpu_vm *vm,
a14faa65 Christian König 2016-01-25 1365 struct amdgpu_bo_va_mapping *mapping,
6b777607 Chunming Zhou 2016-09-21 1366 uint64_t flags,
c756d628 Flora Cui 2016-10-10 1367 struct ttm_mem_reg *mem,
f54d1867 Chris Wilson 2016-10-25 1368 struct dma_fence **fence)
a14faa65 Christian König 2016-01-25 1369 {
c756d628 Flora Cui 2016-10-10 1370 struct drm_mm_node *nodes = mem ? mem->mm_node : NULL;
9fc8fc70 Christian König 2017-09-18 1371 unsigned min_linear_pages = 1 << adev->vm_manager.fragment_size;
570144c6 Christian König 2017-08-30 1372 uint64_t pfn, start = mapping->start;
a14faa65 Christian König 2016-01-25 1373 int r;
a14faa65 Christian König 2016-01-25 1374
a14faa65 Christian König 2016-01-25 1375 /* normally,bo_va->flags only contians READABLE and WIRTEABLE bit go here
a14faa65 Christian König 2016-01-25 1376 * but in case of something, we filter the flags in first place
a14faa65 Christian König 2016-01-25 1377 */
a14faa65 Christian König 2016-01-25 1378 if (!(mapping->flags & AMDGPU_PTE_READABLE))
a14faa65 Christian König 2016-01-25 1379 flags &= ~AMDGPU_PTE_READABLE;
a14faa65 Christian König 2016-01-25 1380 if (!(mapping->flags & AMDGPU_PTE_WRITEABLE))
a14faa65 Christian König 2016-01-25 1381 flags &= ~AMDGPU_PTE_WRITEABLE;
a14faa65 Christian König 2016-01-25 1382
15b31c59 Alex Xie 2017-03-03 1383 flags &= ~AMDGPU_PTE_EXECUTABLE;
15b31c59 Alex Xie 2017-03-03 1384 flags |= mapping->flags & AMDGPU_PTE_EXECUTABLE;
15b31c59 Alex Xie 2017-03-03 1385
b0fd18b0 Alex Xie 2017-03-03 1386 flags &= ~AMDGPU_PTE_MTYPE_MASK;
b0fd18b0 Alex Xie 2017-03-03 1387 flags |= (mapping->flags & AMDGPU_PTE_MTYPE_MASK);
b0fd18b0 Alex Xie 2017-03-03 1388
d0766e98 Zhang, Jerry 2017-04-19 1389 if ((mapping->flags & AMDGPU_PTE_PRT) &&
d0766e98 Zhang, Jerry 2017-04-19 1390 (adev->asic_type >= CHIP_VEGA10)) {
d0766e98 Zhang, Jerry 2017-04-19 1391 flags |= AMDGPU_PTE_PRT;
d0766e98 Zhang, Jerry 2017-04-19 1392 flags &= ~AMDGPU_PTE_VALID;
d0766e98 Zhang, Jerry 2017-04-19 1393 }
d0766e98 Zhang, Jerry 2017-04-19 1394
a14faa65 Christian König 2016-01-25 1395 trace_amdgpu_vm_bo_update(mapping);
a14faa65 Christian König 2016-01-25 1396
63e0ba40 Christian König 2016-08-16 1397 pfn = mapping->offset >> PAGE_SHIFT;
63e0ba40 Christian König 2016-08-16 1398 if (nodes) {
63e0ba40 Christian König 2016-08-16 1399 while (pfn >= nodes->size) {
63e0ba40 Christian König 2016-08-16 1400 pfn -= nodes->size;
63e0ba40 Christian König 2016-08-16 1401 ++nodes;
63e0ba40 Christian König 2016-08-16 1402 }
63e0ba40 Christian König 2016-08-16 1403 }
63e0ba40 Christian König 2016-08-16 1404
63e0ba40 Christian König 2016-08-16 1405 do {
9fc8fc70 Christian König 2017-09-18 1406 dma_addr_t *dma_addr = NULL;
63e0ba40 Christian König 2016-08-16 1407 uint64_t max_entries;
63e0ba40 Christian König 2016-08-16 1408 uint64_t addr, last;
c756d628 Flora Cui 2016-10-10 1409 uint64_t count;
63e0ba40 Christian König 2016-08-16 1410
63e0ba40 Christian König 2016-08-16 1411 if (nodes) {
63e0ba40 Christian König 2016-08-16 1412 addr = nodes->start << PAGE_SHIFT;
63e0ba40 Christian König 2016-08-16 1413 max_entries = (nodes->size - pfn) *
63e0ba40 Christian König 2016-08-16 1414 (PAGE_SIZE / AMDGPU_GPU_PAGE_SIZE);
c756d628 Flora Cui 2016-10-10 1415 switch (mem->mem_type) {
c756d628 Flora Cui 2016-10-10 1416 case TTM_PL_TT:
63e0ba40 Christian König 2016-08-16 1417 max_entries = min(max_entries, 16ull * 1024ull);
c756d628 Flora Cui 2016-10-10 1418
9fc8fc70 Christian König 2017-09-18 1419 for (count = 1; count < max_entries; ++count) {
9fc8fc70 Christian König 2017-09-18 1420 uint64_t idx = pfn + count;
9fc8fc70 Christian König 2017-09-18 1421
9fc8fc70 Christian König 2017-09-18 @1422 if (pages_addr[idx] !=
9fc8fc70 Christian König 2017-09-18 1423 (pages_addr[idx - 1] + PAGE_SIZE))
9fc8fc70 Christian König 2017-09-18 1424 break;
^^^^^^
9fc8fc70 Christian König 2017-09-18 1425 }
9fc8fc70 Christian König 2017-09-18 1426
9fc8fc70 Christian König 2017-09-18 1427 if (count < min_linear_pages) {
9fc8fc70 Christian König 2017-09-18 1428 addr = pfn << PAGE_SHIFT;
9fc8fc70 Christian König 2017-09-18 1429 dma_addr = pages_addr;
9fc8fc70 Christian König 2017-09-18 1430 } else {
9fc8fc70 Christian König 2017-09-18 1431 addr = pages_addr[pfn];
9fc8fc70 Christian König 2017-09-18 1432 max_entries = count;
9fc8fc70 Christian König 2017-09-18 1433 }
c756d628 Flora Cui 2016-10-10 1434 break;
c756d628 Flora Cui 2016-10-10 1435 case AMDGPU_PL_DGMA_IMPORT:
c756d628 Flora Cui 2016-10-10 1436 addr = 0;
c756d628 Flora Cui 2016-10-10 1437 max_entries = min(max_entries, 16ull * 1024ull);
c756d628 Flora Cui 2016-10-10 1438 dma_addr = pages_addr;
c756d628 Flora Cui 2016-10-10 1439 break;
c756d628 Flora Cui 2016-10-10 1440 case AMDGPU_PL_DGMA:
c756d628 Flora Cui 2016-10-10 1441 addr += adev->vm_manager.vram_base_offset +
c756d628 Flora Cui 2016-10-10 1442 adev->mman.bdev.man[mem->mem_type].gpu_offset -
c756d628 Flora Cui 2016-10-10 1443 adev->mman.bdev.man[TTM_PL_VRAM].gpu_offset;
c756d628 Flora Cui 2016-10-10 1444 addr += pfn << PAGE_SHIFT;
c756d628 Flora Cui 2016-10-10 1445 break;
c756d628 Flora Cui 2016-10-10 1446 case TTM_PL_VRAM:
63e0ba40 Christian König 2016-08-16 1447 addr += adev->vm_manager.vram_base_offset;
63e0ba40 Christian König 2016-08-16 1448 addr += pfn << PAGE_SHIFT;
c756d628 Flora Cui 2016-10-10 1449 break;
c756d628 Flora Cui 2016-10-10 1450 default:
c756d628 Flora Cui 2016-10-10 1451 break;
c756d628 Flora Cui 2016-10-10 1452 }
c756d628 Flora Cui 2016-10-10 1453 } else {
c756d628 Flora Cui 2016-10-10 1454 addr = 0;
c756d628 Flora Cui 2016-10-10 1455 max_entries = S64_MAX;
9fc8fc70 Christian König 2017-09-18 1456 }
a14faa65 Christian König 2016-01-25 1457
a9f87f64 Christian König 2017-03-30 1458 last = min((uint64_t)mapping->last, start + max_entries - 1);
9fc8fc70 Christian König 2017-09-18 1459 r = amdgpu_vm_bo_update_mapping(adev, exclusive, dma_addr, vm,
a14faa65 Christian König 2016-01-25 1460 start, last, flags, addr,
a14faa65 Christian König 2016-01-25 1461 fence);
a14faa65 Christian König 2016-01-25 1462 if (r)
a14faa65 Christian König 2016-01-25 1463 return r;
a14faa65 Christian König 2016-01-25 1464
63e0ba40 Christian König 2016-08-16 1465 pfn += last - start + 1;
63e0ba40 Christian König 2016-08-16 1466 if (nodes && nodes->size == pfn) {
63e0ba40 Christian König 2016-08-16 1467 pfn = 0;
63e0ba40 Christian König 2016-08-16 1468 ++nodes;
a14faa65 Christian König 2016-01-25 1469 }
63e0ba40 Christian König 2016-08-16 1470 start = last + 1;
63e0ba40 Christian König 2016-08-16 1471
a9f87f64 Christian König 2017-03-30 1472 } while (unlikely(start != mapping->last + 1));
a14faa65 Christian König 2016-01-25 1473
a14faa65 Christian König 2016-01-25 1474 return 0;
a14faa65 Christian König 2016-01-25 1475 }
a14faa65 Christian König 2016-01-25 1476
:::::: The code at line 1422 was first introduced by commit
:::::: 9fc8fc709b356c85034cbcb3b84c9d8b77865f52 drm/amdgpu: add VM support for huge pages v2
:::::: TO: Christian König <christian.koenig@amd.com>
:::::: CC: Alex Deucher <alexander.deucher@amd.com>
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2018-04-26 6:47 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-26 6:47 [radeon-alex:amd-mainline-dkms-4.15 1135/1759] drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1422 amdgpu_vm_bo_split_mapping() warn: if statement not indented Dan Carpenter
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.