[radeon-alex:drm-next-4.18-wip 182/214] drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c:1571 amdgpu_vm_bo_update() error: we previously assumed 'bo' could be null (see line 1537)
Dan Carpenter
dan.carpenter at oracle.com
Mon Apr 23 09:12:11 UTC 2018
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
More information about the dri-devel
mailing list