aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
diff options
context:
space:
mode:
authorMonk Liu <Monk.Liu@amd.com>2016-04-19 08:11:32 -0400
committerAlex Deucher <alexander.deucher@amd.com>2016-05-11 12:31:16 -0400
commitc5637837ba5d5b5e962e73f5a1a7c5456fa85a68 (patch)
tree50b66ff9a4d96cf46ee1e6503468cf2f4c009b33 /drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
parent1f207f81e371bed8aa4c898de091d5cfbf68f59e (diff)
drm/amdgpu: keep vm in job instead of ib (v2)
ib.vm is a legacy way to get vm, after scheduler implemented vm should be get from job, and all ibs from one job share the same vm, no need to keep ib.vm just move vm field to job. this patch as well add job as paramter to ib_schedule so it can get vm from job->vm. v2: agd: sqaush in: drm/amdgpu: check if ring emit_vm_flush exists in vm flush No vm flush on engines that don't support VM. bug: https://bugs.freedesktop.org/show_bug.cgi?id=95195 Signed-off-by: Monk Liu <Monk.Liu@amd.com> Reviewed-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.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
index 4eea2a18d8bb..917c6f3bfa09 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c
@@ -46,7 +46,7 @@ void amdgpu_job_timeout_func(struct work_struct *work)
46} 46}
47 47
48int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, 48int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
49 struct amdgpu_job **job) 49 struct amdgpu_job **job, struct amdgpu_vm *vm)
50{ 50{
51 size_t size = sizeof(struct amdgpu_job); 51 size_t size = sizeof(struct amdgpu_job);
52 52
@@ -60,6 +60,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs,
60 return -ENOMEM; 60 return -ENOMEM;
61 61
62 (*job)->adev = adev; 62 (*job)->adev = adev;
63 (*job)->vm = vm;
63 (*job)->ibs = (void *)&(*job)[1]; 64 (*job)->ibs = (void *)&(*job)[1];
64 (*job)->num_ibs = num_ibs; 65 (*job)->num_ibs = num_ibs;
65 INIT_WORK(&(*job)->base.work_free_job, amdgpu_job_free_handler); 66 INIT_WORK(&(*job)->base.work_free_job, amdgpu_job_free_handler);
@@ -74,7 +75,7 @@ int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev, unsigned size,
74{ 75{
75 int r; 76 int r;
76 77
77 r = amdgpu_job_alloc(adev, 1, job); 78 r = amdgpu_job_alloc(adev, 1, job, NULL);
78 if (r) 79 if (r)
79 return r; 80 return r;
80 81
@@ -138,7 +139,7 @@ int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring,
138static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job) 139static struct fence *amdgpu_job_dependency(struct amd_sched_job *sched_job)
139{ 140{
140 struct amdgpu_job *job = to_amdgpu_job(sched_job); 141 struct amdgpu_job *job = to_amdgpu_job(sched_job);
141 struct amdgpu_vm *vm = job->ibs->vm; 142 struct amdgpu_vm *vm = job->vm;
142 143
143 struct fence *fence = amdgpu_sync_get_fence(&job->sync); 144 struct fence *fence = amdgpu_sync_get_fence(&job->sync);
144 145
@@ -186,7 +187,7 @@ static struct fence *amdgpu_job_run(struct amd_sched_job *sched_job)
186 187
187 trace_amdgpu_sched_run_job(job); 188 trace_amdgpu_sched_run_job(job);
188 r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs, 189 r = amdgpu_ib_schedule(job->ring, job->num_ibs, job->ibs,
189 job->sync.last_vm_update, &fence); 190 job->sync.last_vm_update, job, &fence);
190 if (r) { 191 if (r) {
191 DRM_ERROR("Error scheduling IBs (%d)\n", r); 192 DRM_ERROR("Error scheduling IBs (%d)\n", r);
192 goto err; 193 goto err;