aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd
diff options
context:
space:
mode:
authorChunming Zhou <david1.zhou@amd.com>2015-08-12 00:58:31 -0400
committerAlex Deucher <alexander.deucher@amd.com>2015-08-17 16:51:17 -0400
commit281b42230175608dec0cd8dab9908250e7aa36a9 (patch)
tree67266406331dc1f0aef6534a197c3ff6402919c1 /drivers/gpu/drm/amd
parent1ffd265243803ac5de9927dfc32541f41da2acf3 (diff)
drm/amdgpu: add reference for **fence
fix fence is released when pass to **fence sometimes. add reference for it. Signed-off-by: Chunming Zhou <david1.zhou@amd.com> Reviewed-by: Christian K?nig <christian.koenig@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd')
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c4
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c2
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c3
-rw-r--r--drivers/gpu/drm/amd/amdgpu/cik_sdma.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c1
-rw-r--r--drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c1
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.c1
11 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index f428288d8363..8796938216d6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -136,6 +136,7 @@ static void amdgpu_job_work_func(struct work_struct *work)
136 sched_job->free_job(sched_job); 136 sched_job->free_job(sched_job);
137 mutex_unlock(&sched_job->job_lock); 137 mutex_unlock(&sched_job->job_lock);
138 /* after processing job, free memory */ 138 /* after processing job, free memory */
139 fence_put(&sched_job->s_fence->base);
139 kfree(sched_job); 140 kfree(sched_job);
140} 141}
141struct amdgpu_cs_parser *amdgpu_cs_parser_create(struct amdgpu_device *adev, 142struct amdgpu_cs_parser *amdgpu_cs_parser_create(struct amdgpu_device *adev,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
index d2e5f3b90a3c..a86e38158afa 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c
@@ -133,13 +133,13 @@ int amdgpu_sched_ib_submit_kernel_helper(struct amdgpu_device *adev,
133 return r; 133 return r;
134 } 134 }
135 ibs[num_ibs - 1].sequence = sched_job->s_fence->v_seq; 135 ibs[num_ibs - 1].sequence = sched_job->s_fence->v_seq;
136 *f = &sched_job->s_fence->base; 136 *f = fence_get(&sched_job->s_fence->base);
137 mutex_unlock(&sched_job->job_lock); 137 mutex_unlock(&sched_job->job_lock);
138 } else { 138 } else {
139 r = amdgpu_ib_schedule(adev, num_ibs, ibs, owner); 139 r = amdgpu_ib_schedule(adev, num_ibs, ibs, owner);
140 if (r) 140 if (r)
141 return r; 141 return r;
142 *f = &ibs[num_ibs - 1].fence->base; 142 *f = fence_get(&ibs[num_ibs - 1].fence->base);
143 } 143 }
144 return 0; 144 return 0;
145} 145}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
index e7336a95fe59..68369cf1e318 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c
@@ -877,7 +877,7 @@ static int amdgpu_uvd_send_msg(struct amdgpu_ring *ring,
877 if (fence) 877 if (fence)
878 *fence = fence_get(f); 878 *fence = fence_get(f);
879 amdgpu_bo_unref(&bo); 879 amdgpu_bo_unref(&bo);
880 880 fence_put(f);
881 if (amdgpu_enable_scheduler) 881 if (amdgpu_enable_scheduler)
882 return 0; 882 return 0;
883 883
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
index 38660eac67d6..33ee6ae28f37 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c
@@ -415,6 +415,7 @@ int amdgpu_vce_get_create_msg(struct amdgpu_ring *ring, uint32_t handle,
415 goto err; 415 goto err;
416 if (fence) 416 if (fence)
417 *fence = fence_get(f); 417 *fence = fence_get(f);
418 fence_put(f);
418 if (amdgpu_enable_scheduler) 419 if (amdgpu_enable_scheduler)
419 return 0; 420 return 0;
420err: 421err:
@@ -481,6 +482,7 @@ int amdgpu_vce_get_destroy_msg(struct amdgpu_ring *ring, uint32_t handle,
481 goto err; 482 goto err;
482 if (fence) 483 if (fence)
483 *fence = fence_get(f); 484 *fence = fence_get(f);
485 fence_put(f);
484 if (amdgpu_enable_scheduler) 486 if (amdgpu_enable_scheduler)
485 return 0; 487 return 0;
486err: 488err:
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
index b3f5d0484980..de882b0db350 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
@@ -366,6 +366,7 @@ static int amdgpu_vm_clear_bo(struct amdgpu_device *adev,
366 &fence); 366 &fence);
367 if (!r) 367 if (!r)
368 amdgpu_bo_fence(bo, fence, true); 368 amdgpu_bo_fence(bo, fence, true);
369 fence_put(fence);
369 if (amdgpu_enable_scheduler) { 370 if (amdgpu_enable_scheduler) {
370 amdgpu_bo_unreserve(bo); 371 amdgpu_bo_unreserve(bo);
371 return 0; 372 return 0;
@@ -495,6 +496,7 @@ int amdgpu_vm_update_page_directory(struct amdgpu_device *adev,
495 if (r) 496 if (r)
496 goto error_free; 497 goto error_free;
497 amdgpu_bo_fence(pd, fence, true); 498 amdgpu_bo_fence(pd, fence, true);
499 fence_put(fence);
498 } 500 }
499 501
500 if (!amdgpu_enable_scheduler || ib->length_dw == 0) { 502 if (!amdgpu_enable_scheduler || ib->length_dw == 0) {
@@ -812,6 +814,7 @@ static int amdgpu_vm_bo_update_mapping(struct amdgpu_device *adev,
812 fence_put(*fence); 814 fence_put(*fence);
813 *fence = fence_get(f); 815 *fence = fence_get(f);
814 } 816 }
817 fence_put(f);
815 if (!amdgpu_enable_scheduler) { 818 if (!amdgpu_enable_scheduler) {
816 amdgpu_ib_free(adev, ib); 819 amdgpu_ib_free(adev, ib);
817 kfree(ib); 820 kfree(ib);
diff --git a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
index c3ed5b22d732..2b4242b39b0a 100644
--- a/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
+++ b/drivers/gpu/drm/amd/amdgpu/cik_sdma.c
@@ -669,6 +669,7 @@ static int cik_sdma_ring_test_ib(struct amdgpu_ring *ring)
669 } 669 }
670 670
671err1: 671err1:
672 fence_put(f);
672 amdgpu_ib_free(adev, &ib); 673 amdgpu_ib_free(adev, &ib);
673err0: 674err0:
674 amdgpu_wb_free(adev, index); 675 amdgpu_wb_free(adev, index);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
index ee1c47f9a2b6..9b0cab413677 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c
@@ -2698,6 +2698,7 @@ static int gfx_v7_0_ring_test_ib(struct amdgpu_ring *ring)
2698 } 2698 }
2699 2699
2700err2: 2700err2:
2701 fence_put(f);
2701 amdgpu_ib_free(adev, &ib); 2702 amdgpu_ib_free(adev, &ib);
2702err1: 2703err1:
2703 amdgpu_gfx_scratch_free(adev, scratch); 2704 amdgpu_gfx_scratch_free(adev, scratch);
diff --git a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
index a865d96b67af..4b68e6306f40 100644
--- a/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c
@@ -659,6 +659,7 @@ static int gfx_v8_0_ring_test_ib(struct amdgpu_ring *ring)
659 r = -EINVAL; 659 r = -EINVAL;
660 } 660 }
661err2: 661err2:
662 fence_put(f);
662 amdgpu_ib_free(adev, &ib); 663 amdgpu_ib_free(adev, &ib);
663err1: 664err1:
664 amdgpu_gfx_scratch_free(adev, scratch); 665 amdgpu_gfx_scratch_free(adev, scratch);
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
index 6de7dc88d53c..9de8104eddeb 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c
@@ -733,6 +733,7 @@ static int sdma_v2_4_ring_test_ib(struct amdgpu_ring *ring)
733 } 733 }
734 734
735err1: 735err1:
736 fence_put(f);
736 amdgpu_ib_free(adev, &ib); 737 amdgpu_ib_free(adev, &ib);
737err0: 738err0:
738 amdgpu_wb_free(adev, index); 739 amdgpu_wb_free(adev, index);
diff --git a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
index 963a991fea00..029f3455f9f9 100644
--- a/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
+++ b/drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c
@@ -853,6 +853,7 @@ static int sdma_v3_0_ring_test_ib(struct amdgpu_ring *ring)
853 r = -EINVAL; 853 r = -EINVAL;
854 } 854 }
855err1: 855err1:
856 fence_put(f);
856 amdgpu_ib_free(adev, &ib); 857 amdgpu_ib_free(adev, &ib);
857err0: 858err0:
858 amdgpu_wb_free(adev, index); 859 amdgpu_wb_free(adev, index);
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
index 39577f6c0241..5017c71ba700 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
@@ -313,6 +313,7 @@ int amd_sched_push_job(struct amd_gpu_scheduler *sched,
313 kfree(job); 313 kfree(job);
314 return -EINVAL; 314 return -EINVAL;
315 } 315 }
316 fence_get(&(*fence)->base);
316 job->s_fence = *fence; 317 job->s_fence = *fence;
317 while (kfifo_in_spinlocked(&c_entity->job_queue, &job, sizeof(void *), 318 while (kfifo_in_spinlocked(&c_entity->job_queue, &job, sizeof(void *),
318 &c_entity->queue_lock) != sizeof(void *)) { 319 &c_entity->queue_lock) != sizeof(void *)) {