tree: git://people.freedesktop.org/~agd5f/linux.git drm-next-4.18-wip
head: 52132fd03504140b4cc58c01b19e82929a03af7a
commit: 7bcfcb8217c6ab4224c7de5074132f2185558b72 [182/214] drm/amdgpu: simplify
bo_va list when vm bo update (v2)
smatch warnings:
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1571 amdgpu_vm_bo_update() error: we
previously assumed 'bo' could be null (see line 1537)
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1572 amdgpu_vm_bo_update() warn:
variable dereferenced before check 'bo' (see line 1571)
git remote add radeon-alex git://people.freedesktop.org/~agd5f/linux.git
git remote update radeon-alex
git checkout 7bcfcb8217c6ab4224c7de5074132f2185558b72
vim +/bo +1571 drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
a14faa65 Christian König 2016-01-25 1489
a14faa65 Christian König 2016-01-25 1490 /**
d38ceaf9 Alex Deucher 2015-04-20 1491 * amdgpu_vm_bo_update - update all
BO mappings in the vm page table
d38ceaf9 Alex Deucher 2015-04-20 1492 *
d38ceaf9 Alex Deucher 2015-04-20 1493 * @adev: amdgpu_device pointer
d38ceaf9 Alex Deucher 2015-04-20 1494 * @bo_va: requested BO and VM object
99e124f4 Christian König 2016-08-16 1495 * @clear: if true clear the entries
d38ceaf9 Alex Deucher 2015-04-20 1496 *
d38ceaf9 Alex Deucher 2015-04-20 1497 * Fill in the page table entries
for @bo_va.
d38ceaf9 Alex Deucher 2015-04-20 1498 * Returns 0 for success, -EINVAL
for failure.
d38ceaf9 Alex Deucher 2015-04-20 1499 */
d38ceaf9 Alex Deucher 2015-04-20 1500 int amdgpu_vm_bo_update(struct
amdgpu_device *adev,
d38ceaf9 Alex Deucher 2015-04-20 1501 struct
amdgpu_bo_va *bo_va,
99e124f4 Christian König 2016-08-16 1502 bool clear)
d38ceaf9 Alex Deucher 2015-04-20 1503 {
ec681545 Christian König 2017-08-01 1504 struct amdgpu_bo *bo =
bo_va->base.bo;
ec681545 Christian König 2017-08-01 1505 struct amdgpu_vm *vm =
bo_va->base.vm;
d38ceaf9 Alex Deucher 2015-04-20 1506 struct amdgpu_bo_va_mapping
*mapping;
8358dcee Christian König 2016-03-30 1507 dma_addr_t *pages_addr = NULL;
99e124f4 Christian König 2016-08-16 1508 struct ttm_mem_reg *mem;
63e0ba40 Christian König 2016-08-16 1509 struct drm_mm_node *nodes;
4e55eb38 Christian König 2017-09-11 1510 struct dma_fence *exclusive,
**last_update;
457e0fee Christian König 2017-08-22 1511 uint64_t flags;
7bcfcb82 Junwei Zhang 2018-04-19 1512 uint32_t mem_type;
d38ceaf9 Alex Deucher 2015-04-20 1513 int r;
d38ceaf9 Alex Deucher 2015-04-20 1514
ec681545 Christian König 2017-08-01 1515 if (clear || !bo_va->base.bo) {
99e124f4 Christian König 2016-08-16 1516 mem = NULL;
63e0ba40 Christian König 2016-08-16 1517 nodes = NULL;
99e124f4 Christian König 2016-08-16 1518 exclusive = NULL;
99e124f4 Christian König 2016-08-16 1519 } else {
8358dcee Christian König 2016-03-30 1520 struct ttm_dma_tt *ttm;
8358dcee Christian König 2016-03-30 1521
ec681545 Christian König 2017-08-01 1522 mem =
&bo_va->base.bo->tbo.mem;
63e0ba40 Christian König 2016-08-16 1523 nodes = mem->mm_node;
63e0ba40 Christian König 2016-08-16 1524 if (mem->mem_type ==
TTM_PL_TT) {
ec681545 Christian König 2017-08-01 1525 ttm =
container_of(bo_va->base.bo->tbo.ttm,
ec681545 Christian König 2017-08-01 1526
struct ttm_dma_tt, ttm);
8358dcee Christian König 2016-03-30 1527 pages_addr =
ttm->dma_address;
9ab21462 Christian König 2015-11-30 1528 }
ec681545 Christian König 2017-08-01 1529 exclusive =
reservation_object_get_excl(bo->tbo.resv);
d38ceaf9 Alex Deucher 2015-04-20 1530 }
d38ceaf9 Alex Deucher 2015-04-20 1531
457e0fee Christian König 2017-08-22 1532 if (bo)
ec681545 Christian König 2017-08-01 1533 flags =
amdgpu_ttm_tt_pte_flags(adev, bo->tbo.ttm, mem);
457e0fee Christian König 2017-08-22 1534 else
a5f6b5b1 Christian König 2017-01-30 1535 flags = 0x0;
d38ceaf9 Alex Deucher 2015-04-20 1536
4e55eb38 Christian König 2017-09-11 @1537 if (clear || (bo &&
bo->tbo.resv == vm->root.base.bo->tbo.resv))
^^
Checked.
4e55eb38 Christian König 2017-09-11 1538 last_update =
&vm->last_update;
4e55eb38 Christian König 2017-09-11 1539 else
4e55eb38 Christian König 2017-09-11 1540 last_update =
&bo_va->last_pt_update;
4e55eb38 Christian König 2017-09-11 1541
3d7d4d3a Christian König 2017-08-23 1542 if (!clear &&
bo_va->base.moved) {
3d7d4d3a Christian König 2017-08-23 1543 bo_va->base.moved =
false;
7fc11959 Christian König 2015-07-30 1544
list_splice_init(&bo_va->valids, &bo_va->invalids);
3d7d4d3a Christian König 2017-08-23 1545
cb7b6ec2 Christian König 2017-08-15 1546 } else if (bo_va->cleared !=
clear) {
7fc11959 Christian König 2015-07-30 1547
list_splice_init(&bo_va->valids, &bo_va->invalids);
3d7d4d3a Christian König 2017-08-23 1548 }
7fc11959 Christian König 2015-07-30 1549
7fc11959 Christian König 2015-07-30 1550 list_for_each_entry(mapping,
&bo_va->invalids, list) {
457e0fee Christian König 2017-08-22 1551 r =
amdgpu_vm_bo_split_mapping(adev, exclusive, pages_addr, vm,
63e0ba40 Christian König 2016-08-16 1552
mapping, flags, nodes,
4e55eb38 Christian König 2017-09-11 1553
last_update);
d38ceaf9 Alex Deucher 2015-04-20 1554 if (r)
d38ceaf9 Alex Deucher 2015-04-20 1555 return r;
d38ceaf9 Alex Deucher 2015-04-20 1556 }
d38ceaf9 Alex Deucher 2015-04-20 1557
cb7b6ec2 Christian König 2017-08-15 1558 if (vm->use_cpu_for_update) {
cb7b6ec2 Christian König 2017-08-15 1559 /* Flush HDP */
cb7b6ec2 Christian König 2017-08-15 1560 mb();
69882565 Christian König 2018-01-19 1561
amdgpu_asic_flush_hdp(adev, NULL);
d6c10f6b Christian König 2015-09-28 1562 }
d6c10f6b Christian König 2015-09-28 1563
d38ceaf9 Alex Deucher 2015-04-20 1564 spin_lock(&vm->status_lock);
7bcfcb82 Junwei Zhang 2018-04-19 1565
list_del_init(&bo_va->base.vm_status);
eff5a054 Christian König 2018-03-19 1566
eff5a054 Christian König 2018-03-19 1567 /* If the BO is not in its
preferred location add it back to
eff5a054 Christian König 2018-03-19 1568 * the evicted list so that it
gets validated again on the
eff5a054 Christian König 2018-03-19 1569 * next command submission.
eff5a054 Christian König 2018-03-19 1570 */
7bcfcb82 Junwei Zhang 2018-04-19 @1571 mem_type = bo->tbo.mem.mem_type;
^^^^^^^^^^^^^^^^^^^^
7bcfcb82 Junwei Zhang 2018-04-19 @1572 if (bo && bo->tbo.resv ==
vm->root.base.bo->tbo.resv &&
^^
This check doesn't make sense because we dereferenced it on the line
before.
7bcfcb82 Junwei Zhang 2018-04-19 1573 !(bo->preferred_domains &
amdgpu_mem_type_to_domain(mem_type)))
eff5a054 Christian König 2018-03-19 1574
list_add_tail(&bo_va->base.vm_status, &vm->evicted);
d38ceaf9 Alex Deucher 2015-04-20 1575 spin_unlock(&vm->status_lock);
d38ceaf9 Alex Deucher 2015-04-20 1576
cb7b6ec2 Christian König 2017-08-15 1577
list_splice_init(&bo_va->invalids, &bo_va->valids);
cb7b6ec2 Christian König 2017-08-15 1578 bo_va->cleared = clear;
cb7b6ec2 Christian König 2017-08-15 1579
cb7b6ec2 Christian König 2017-08-15 1580 if
(trace_amdgpu_vm_bo_mapping_enabled()) {
cb7b6ec2 Christian König 2017-08-15 1581
list_for_each_entry(mapping, &bo_va->valids, list)
cb7b6ec2 Christian König 2017-08-15 1582
trace_amdgpu_vm_bo_mapping(mapping);
68c62306 Christian König 2017-07-11 1583 }
68c62306 Christian König 2017-07-11 1584
d38ceaf9 Alex Deucher 2015-04-20 1585 return 0;
d38ceaf9 Alex Deucher 2015-04-20 1586 }
d38ceaf9 Alex Deucher 2015-04-20 1587
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel