Skip to content

Commit

Permalink
drm/ttm: make TT creation purely optional v3
Browse files Browse the repository at this point in the history
We only need the page array when the BO is about to be accessed.

So not only populate, but also create it on demand.

v2: move NULL check into ttm_tt_create()
v3: fix the occurrence in ttm_bo_kmap_ttm as well

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
Link: https://patchwork.freedesktop.org/patch/373182/
  • Loading branch information
Christian König committed Jun 29, 2020
1 parent 58e4d68 commit 2ddef17
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 31 deletions.
37 changes: 9 additions & 28 deletions drivers/gpu/drm/ttm/ttm_bo.c
Original file line number Diff line number Diff line change
Expand Up @@ -292,12 +292,11 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
*/

if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
if (bo->ttm == NULL) {
bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
ret = ttm_tt_create(bo, zero);
if (ret)
goto out_err;
}
bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);

ret = ttm_tt_create(bo, zero);
if (ret)
goto out_err;

ret = ttm_tt_set_placement_caching(bo->ttm, mem->placement);
if (ret)
Expand Down Expand Up @@ -660,13 +659,8 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo,
placement.num_busy_placement = 0;
bdev->driver->evict_flags(bo, &placement);

if (!placement.num_placement && !placement.num_busy_placement) {
ret = ttm_bo_pipeline_gutting(bo);
if (ret)
return ret;

return ttm_tt_create(bo, false);
}
if (!placement.num_placement && !placement.num_busy_placement)
return ttm_bo_pipeline_gutting(bo);

evict_mem = bo->mem;
evict_mem.mm_node = NULL;
Expand Down Expand Up @@ -1195,13 +1189,8 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
/*
* Remove the backing store if no placement is given.
*/
if (!placement->num_placement && !placement->num_busy_placement) {
ret = ttm_bo_pipeline_gutting(bo);
if (ret)
return ret;

return ttm_tt_create(bo, false);
}
if (!placement->num_placement && !placement->num_busy_placement)
return ttm_bo_pipeline_gutting(bo);

/*
* Check whether we need to move buffer.
Expand All @@ -1218,14 +1207,6 @@ int ttm_bo_validate(struct ttm_buffer_object *bo,
ttm_flag_masked(&bo->mem.placement, new_flags,
~TTM_PL_MASK_MEMTYPE);
}
/*
* We might need to add a TTM.
*/
if (bo->mem.mem_type == TTM_PL_SYSTEM && bo->ttm == NULL) {
ret = ttm_tt_create(bo, true);
if (ret)
return ret;
}
return 0;
}
EXPORT_SYMBOL(ttm_bo_validate);
Expand Down
7 changes: 5 additions & 2 deletions drivers/gpu/drm/ttm/ttm_bo_util.c
Original file line number Diff line number Diff line change
Expand Up @@ -532,12 +532,15 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo,
.interruptible = false,
.no_wait_gpu = false
};
struct ttm_tt *ttm = bo->ttm;
struct ttm_tt *ttm;
pgprot_t prot;
int ret;

BUG_ON(!ttm);
ret = ttm_tt_create(bo, true);
if (ret)
return ret;

ttm = bo->ttm;
ret = ttm_tt_populate(ttm, &ctx);
if (ret)
return ret;
Expand Down
5 changes: 5 additions & 0 deletions drivers/gpu/drm/ttm/ttm_bo_vm.c
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,11 @@ vm_fault_t ttm_bo_vm_fault_reserved(struct vm_fault *vmf,

};

if (ttm_tt_create(bo, true)) {
ret = VM_FAULT_OOM;
goto out_io_unlock;
}

ttm = bo->ttm;
if (ttm_tt_populate(bo->ttm, &ctx)) {
ret = VM_FAULT_OOM;
Expand Down
4 changes: 3 additions & 1 deletion drivers/gpu/drm/ttm/ttm_tt.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)

dma_resv_assert_held(bo->base.resv);

if (bo->ttm)
return 0;

if (bdev->need_dma32)
page_flags |= TTM_PAGE_FLAG_DMA32;

Expand All @@ -67,7 +70,6 @@ int ttm_tt_create(struct ttm_buffer_object *bo, bool zero_alloc)
page_flags |= TTM_PAGE_FLAG_SG;
break;
default:
bo->ttm = NULL;
pr_err("Illegal buffer object type\n");
return -EINVAL;
}
Expand Down

0 comments on commit 2ddef17

Please sign in to comment.