diff options
author | Chunming Zhou <david1.zhou@amd.com> | 2015-08-12 00:58:31 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-08-17 16:51:17 -0400 |
commit | 281b42230175608dec0cd8dab9908250e7aa36a9 (patch) | |
tree | 67266406331dc1f0aef6534a197c3ff6402919c1 /drivers/gpu/drm/amd | |
parent | 1ffd265243803ac5de9927dfc32541f41da2acf3 (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.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_uvd.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vce.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 3 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/cik_sdma.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v7_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/gfx_v8_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v2_4.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/sdma_v3_0.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 1 |
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 | } |
141 | struct amdgpu_cs_parser *amdgpu_cs_parser_create(struct amdgpu_device *adev, | 142 | struct 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; |
420 | err: | 421 | err: |
@@ -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; |
486 | err: | 488 | err: |
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 | ||
671 | err1: | 671 | err1: |
672 | fence_put(f); | ||
672 | amdgpu_ib_free(adev, &ib); | 673 | amdgpu_ib_free(adev, &ib); |
673 | err0: | 674 | err0: |
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 | ||
2700 | err2: | 2700 | err2: |
2701 | fence_put(f); | ||
2701 | amdgpu_ib_free(adev, &ib); | 2702 | amdgpu_ib_free(adev, &ib); |
2702 | err1: | 2703 | err1: |
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 | } |
661 | err2: | 661 | err2: |
662 | fence_put(f); | ||
662 | amdgpu_ib_free(adev, &ib); | 663 | amdgpu_ib_free(adev, &ib); |
663 | err1: | 664 | err1: |
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 | ||
735 | err1: | 735 | err1: |
736 | fence_put(f); | ||
736 | amdgpu_ib_free(adev, &ib); | 737 | amdgpu_ib_free(adev, &ib); |
737 | err0: | 738 | err0: |
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 | } |
855 | err1: | 855 | err1: |
856 | fence_put(f); | ||
856 | amdgpu_ib_free(adev, &ib); | 857 | amdgpu_ib_free(adev, &ib); |
857 | err0: | 858 | err0: |
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 *)) { |