diff options
author | Christian König <christian.koenig@amd.com> | 2016-02-08 06:13:05 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-10 14:17:24 -0500 |
commit | e86f9ceee19ec028ae79a09fe1eaabf315d67969 (patch) | |
tree | 5f9863ae2b5d30ff4dc3579d0395ea486d735d92 /drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | |
parent | 9f2ade33e659250a810e5bdab0c602085792d5b6 (diff) |
drm/amdgpu: move sync into job object
No need to keep that for every IB.
Signed-off-by: Christian König <christian.koenig@amd.com>
Acked-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_job.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index 6f3e757e056e..0f6719e0ace0 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | |||
@@ -46,6 +46,8 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, | |||
46 | (*job)->ibs = (void *)&(*job)[1]; | 46 | (*job)->ibs = (void *)&(*job)[1]; |
47 | (*job)->num_ibs = num_ibs; | 47 | (*job)->num_ibs = num_ibs; |
48 | 48 | ||
49 | amdgpu_sync_create(&(*job)->sync); | ||
50 | |||
49 | return 0; | 51 | return 0; |
50 | } | 52 | } |
51 | 53 | ||
@@ -73,6 +75,7 @@ void amdgpu_job_free(struct amdgpu_job *job) | |||
73 | amdgpu_ib_free(job->adev, &job->ibs[i]); | 75 | amdgpu_ib_free(job->adev, &job->ibs[i]); |
74 | 76 | ||
75 | amdgpu_bo_unref(&job->uf.bo); | 77 | amdgpu_bo_unref(&job->uf.bo); |
78 | amdgpu_sync_free(&job->sync); | ||
76 | kfree(job); | 79 | kfree(job); |
77 | } | 80 | } |
78 | 81 | ||
@@ -99,23 +102,22 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, | |||
99 | static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job) | 102 | static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job) |
100 | { | 103 | { |
101 | struct amdgpu_job *job = to_amdgpu_job(sched_job); | 104 | struct amdgpu_job *job = to_amdgpu_job(sched_job); |
102 | struct amdgpu_sync *sync = &job->ibs->sync; | ||
103 | struct amdgpu_vm *vm = job->ibs->vm; | 105 | struct amdgpu_vm *vm = job->ibs->vm; |
104 | 106 | ||
105 | struct fence *fence = amdgpu_sync_get_fence(sync); | 107 | struct fence *fence = amdgpu_sync_get_fence(&job->sync); |
106 | 108 | ||
107 | if (fence == NULL && vm && !job->ibs->grabbed_vmid) { | 109 | if (fence == NULL && vm && !job->ibs->grabbed_vmid) { |
108 | struct amdgpu_ring *ring = job->ring; | 110 | struct amdgpu_ring *ring = job->ring; |
109 | int r; | 111 | int r; |
110 | 112 | ||
111 | r = amdgpu_vm_grab_id(vm, ring, sync, | 113 | r = amdgpu_vm_grab_id(vm, ring, &job->sync, |
112 | &job->base.s_fence->base); | 114 | &job->base.s_fence->base); |
113 | if (r) | 115 | if (r) |
114 | DRM_ERROR("Error getting VM ID (%d)\n", r); | 116 | DRM_ERROR("Error getting VM ID (%d)\n", r); |
115 | else | 117 | else |
116 | job->ibs->grabbed_vmid = true; | 118 | job->ibs->grabbed_vmid = true; |
117 | 119 | ||
118 | fence = amdgpu_sync_get_fence(sync); | 120 | fence = amdgpu_sync_get_fence(&job->sync); |
119 | } | 121 | } |
120 | 122 | ||
121 | return fence; | 123 | return fence; |
@@ -132,9 +134,16 @@ static struct fence *amdgpu_job_run(struct amd_sched_job *sched_job) | |||
132 | return NULL; | 134 | return NULL; |
133 | } | 135 | } |
134 | job = to_amdgpu_job(sched_job); | 136 | job = to_amdgpu_job(sched_job); |
137 | |||
138 | r = amdgpu_sync_wait(&job->sync); | ||
139 | if (r) { | ||
140 | DRM_ERROR("failed to sync wait (%d)\n", r); | ||
141 | return NULL; | ||
142 | } | ||
143 | |||
135 | trace_amdgpu_sched_run_job(job); | 144 | trace_amdgpu_sched_run_job(job); |
136 | r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, | 145 | r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, job->owner, |
137 | job->owner, &fence); | 146 | job->sync.last_vm_update, &fence); |
138 | if (r) { | 147 | if (r) { |
139 | DRM_ERROR("Error scheduling IBs (%d)\n", r); | 148 | DRM_ERROR("Error scheduling IBs (%d)\n", r); |
140 | goto err; | 149 | goto err; |