Am 30.06.2017 um 17:18 schrieb John Brooks:
When a BO is moved to VRAM, clear AMDGPU_BO_FLAG_CPU_ACCESS. This allows it
to potentially later move to invisible VRAM if the CPU does not access it
again.
Setting the CPU_ACCESS flag in amdgpu_fault_reserve_notify() also means
that we can remove the loop to restrict lpfn to the end of visible VRAM,
because amdgpu_ttm_placement_init() will do it for us.
Signed-off-by: John Brooks <j...@fastquake.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 3 +++
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 8 ++++++++
2 files changed, 11 insertions(+)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index fa8aeca..19bd2fd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -953,6 +953,9 @@ int amdgpu_bo_fault_reserve_notify(struct ttm_buffer_object
*bo)
return 0;
abo = container_of(bo, struct amdgpu_bo, tbo);
+
+ abo->flags |= AMDGPU_BO_FLAG_CPU_ACCESS;
+
if (bo->mem.mem_type != TTM_PL_VRAM)
return 0;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index c9b131b..cc65cdd 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -417,6 +417,7 @@ static int amdgpu_move_ram_vram(struct ttm_buffer_object
*bo,
struct ttm_mem_reg *new_mem)
{
struct amdgpu_device *adev;
+ struct amdgpu_bo *abo;
struct ttm_mem_reg *old_mem = &bo->mem;
struct ttm_mem_reg tmp_mem;
struct ttm_placement placement;
@@ -424,6 +425,7 @@ static int amdgpu_move_ram_vram(struct ttm_buffer_object
*bo,
int r;
adev = amdgpu_ttm_adev(bo->bdev);
+ abo = container_of(bo, struct amdgpu_bo, tbo);
tmp_mem = *new_mem;
tmp_mem.mm_node = NULL;
placement.num_placement = 1;
@@ -446,6 +448,12 @@ static int amdgpu_move_ram_vram(struct ttm_buffer_object
*bo,
if (unlikely(r)) {
goto out_cleanup;
}
+
+ /* The page fault handler will re-set this if the CPU accesses the BO
+ * after it's moved.
+ */
+ abo->flags &= ~AMDGPU_BO_FLAG_CPU_ACCESS;
+
This is the wrong place for clearing the flag. This code path is only
called when we move things back in after suspend/resume (or run out of
GTT space).
Regards,
Christian.
out_cleanup:
ttm_bo_mem_put(bo, &tmp_mem);
return r;
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx