diff options
author | Christian König <christian.koenig@amd.com> | 2017-06-29 05:46:15 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2017-07-14 11:05:57 -0400 |
commit | fc9c8f5459f2dfa7f83bee3f388faaf570ef96ed (patch) | |
tree | 549af39b8bb1671c1fd915a2d953438177165e42 /drivers/gpu/drm/amd/amdgpu | |
parent | df264f9e08081c8c79523fd9e9f5241ed23ee7e8 (diff) |
drm/amdgpu: add vm_needs_flush parameter to amdgpu_copy_buffer
This allows us to flush the system VM here.
Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Acked-by: Felix Kuehling <Felix.Kuehling@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_test.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 9 |
5 files changed, 15 insertions, 16 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c index 1beae5b930d0..2fb299afc12b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_benchmark.c | |||
@@ -40,7 +40,7 @@ static int amdgpu_benchmark_do_move(struct amdgpu_device *adev, unsigned size, | |||
40 | for (i = 0; i < n; i++) { | 40 | for (i = 0; i < n; i++) { |
41 | struct amdgpu_ring *ring = adev->mman.buffer_funcs_ring; | 41 | struct amdgpu_ring *ring = adev->mman.buffer_funcs_ring; |
42 | r = amdgpu_copy_buffer(ring, saddr, daddr, size, NULL, &fence, | 42 | r = amdgpu_copy_buffer(ring, saddr, daddr, size, NULL, &fence, |
43 | false); | 43 | false, false); |
44 | if (r) | 44 | if (r) |
45 | goto exit_do_move; | 45 | goto exit_do_move; |
46 | r = dma_fence_wait(fence, false); | 46 | r = dma_fence_wait(fence, false); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 8ee69652be8c..c34cf2c1ae4e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | |||
@@ -535,7 +535,7 @@ int amdgpu_bo_backup_to_shadow(struct amdgpu_device *adev, | |||
535 | 535 | ||
536 | r = amdgpu_copy_buffer(ring, bo_addr, shadow_addr, | 536 | r = amdgpu_copy_buffer(ring, bo_addr, shadow_addr, |
537 | amdgpu_bo_size(bo), resv, fence, | 537 | amdgpu_bo_size(bo), resv, fence, |
538 | direct); | 538 | direct, false); |
539 | if (!r) | 539 | if (!r) |
540 | amdgpu_bo_fence(bo, *fence, true); | 540 | amdgpu_bo_fence(bo, *fence, true); |
541 | 541 | ||
@@ -588,7 +588,7 @@ int amdgpu_bo_restore_from_shadow(struct amdgpu_device *adev, | |||
588 | 588 | ||
589 | r = amdgpu_copy_buffer(ring, shadow_addr, bo_addr, | 589 | r = amdgpu_copy_buffer(ring, shadow_addr, bo_addr, |
590 | amdgpu_bo_size(bo), resv, fence, | 590 | amdgpu_bo_size(bo), resv, fence, |
591 | direct); | 591 | direct, false); |
592 | if (!r) | 592 | if (!r) |
593 | amdgpu_bo_fence(bo, *fence, true); | 593 | amdgpu_bo_fence(bo, *fence, true); |
594 | 594 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c index 15510dadde01..d02e611a2dae 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_test.c | |||
@@ -111,7 +111,7 @@ static void amdgpu_do_test_moves(struct amdgpu_device *adev) | |||
111 | amdgpu_bo_kunmap(gtt_obj[i]); | 111 | amdgpu_bo_kunmap(gtt_obj[i]); |
112 | 112 | ||
113 | r = amdgpu_copy_buffer(ring, gtt_addr, vram_addr, | 113 | r = amdgpu_copy_buffer(ring, gtt_addr, vram_addr, |
114 | size, NULL, &fence, false); | 114 | size, NULL, &fence, false, false); |
115 | 115 | ||
116 | if (r) { | 116 | if (r) { |
117 | DRM_ERROR("Failed GTT->VRAM copy %d\n", i); | 117 | DRM_ERROR("Failed GTT->VRAM copy %d\n", i); |
@@ -156,7 +156,7 @@ static void amdgpu_do_test_moves(struct amdgpu_device *adev) | |||
156 | amdgpu_bo_kunmap(vram_obj); | 156 | amdgpu_bo_kunmap(vram_obj); |
157 | 157 | ||
158 | r = amdgpu_copy_buffer(ring, vram_addr, gtt_addr, | 158 | r = amdgpu_copy_buffer(ring, vram_addr, gtt_addr, |
159 | size, NULL, &fence, false); | 159 | size, NULL, &fence, false, false); |
160 | 160 | ||
161 | if (r) { | 161 | if (r) { |
162 | DRM_ERROR("Failed VRAM->GTT copy %d\n", i); | 162 | DRM_ERROR("Failed VRAM->GTT copy %d\n", i); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c index c9b131b13ef7..8c5f75d29f32 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | |||
@@ -318,7 +318,7 @@ static int amdgpu_move_blit(struct ttm_buffer_object *bo, | |||
318 | 318 | ||
319 | r = amdgpu_copy_buffer(ring, old_start, new_start, | 319 | r = amdgpu_copy_buffer(ring, old_start, new_start, |
320 | cur_pages * PAGE_SIZE, | 320 | cur_pages * PAGE_SIZE, |
321 | bo->resv, &next, false); | 321 | bo->resv, &next, false, false); |
322 | if (r) | 322 | if (r) |
323 | goto error; | 323 | goto error; |
324 | 324 | ||
@@ -1256,12 +1256,11 @@ int amdgpu_mmap(struct file *filp, struct vm_area_struct *vma) | |||
1256 | return ttm_bo_mmap(filp, vma, &adev->mman.bdev); | 1256 | return ttm_bo_mmap(filp, vma, &adev->mman.bdev); |
1257 | } | 1257 | } |
1258 | 1258 | ||
1259 | int amdgpu_copy_buffer(struct amdgpu_ring *ring, | 1259 | int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset, |
1260 | uint64_t src_offset, | 1260 | uint64_t dst_offset, uint32_t byte_count, |
1261 | uint64_t dst_offset, | ||
1262 | uint32_t byte_count, | ||
1263 | struct reservation_object *resv, | 1261 | struct reservation_object *resv, |
1264 | struct dma_fence **fence, bool direct_submit) | 1262 | struct dma_fence **fence, bool direct_submit, |
1263 | bool vm_needs_flush) | ||
1265 | { | 1264 | { |
1266 | struct amdgpu_device *adev = ring->adev; | 1265 | struct amdgpu_device *adev = ring->adev; |
1267 | struct amdgpu_job *job; | 1266 | struct amdgpu_job *job; |
@@ -1283,6 +1282,7 @@ int amdgpu_copy_buffer(struct amdgpu_ring *ring, | |||
1283 | if (r) | 1282 | if (r) |
1284 | return r; | 1283 | return r; |
1285 | 1284 | ||
1285 | job->vm_needs_flush = vm_needs_flush; | ||
1286 | if (resv) { | 1286 | if (resv) { |
1287 | r = amdgpu_sync_resv(adev, &job->sync, resv, | 1287 | r = amdgpu_sync_resv(adev, &job->sync, resv, |
1288 | AMDGPU_FENCE_OWNER_UNDEFINED); | 1288 | AMDGPU_FENCE_OWNER_UNDEFINED); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h index 6bdede8ff12b..cd5bbfa2773f 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | |||
@@ -61,12 +61,11 @@ int amdgpu_gtt_mgr_alloc(struct ttm_mem_type_manager *man, | |||
61 | const struct ttm_place *place, | 61 | const struct ttm_place *place, |
62 | struct ttm_mem_reg *mem); | 62 | struct ttm_mem_reg *mem); |
63 | 63 | ||
64 | int amdgpu_copy_buffer(struct amdgpu_ring *ring, | 64 | int amdgpu_copy_buffer(struct amdgpu_ring *ring, uint64_t src_offset, |
65 | uint64_t src_offset, | 65 | uint64_t dst_offset, uint32_t byte_count, |
66 | uint64_t dst_offset, | ||
67 | uint32_t byte_count, | ||
68 | struct reservation_object *resv, | 66 | struct reservation_object *resv, |
69 | struct dma_fence **fence, bool direct_submit); | 67 | struct dma_fence **fence, bool direct_submit, |
68 | bool vm_needs_flush); | ||
70 | int amdgpu_fill_buffer(struct amdgpu_bo *bo, | 69 | int amdgpu_fill_buffer(struct amdgpu_bo *bo, |
71 | uint32_t src_data, | 70 | uint32_t src_data, |
72 | struct reservation_object *resv, | 71 | struct reservation_object *resv, |