diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | 11 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index 412fc2f39fa5..9bf72b24495c 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -2401,5 +2401,4 @@ amdgpu_cs_find_mapping(struct amdgpu_cs_parser *parser, | |||
2401 | uint64_t addr, struct amdgpu_bo **bo); | 2401 | uint64_t addr, struct amdgpu_bo **bo); |
2402 | 2402 | ||
2403 | #include "amdgpu_object.h" | 2403 | #include "amdgpu_object.h" |
2404 | |||
2405 | #endif | 2404 | #endif |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c index eb0f7890401a..23468088a995 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_job.c | |||
@@ -28,6 +28,12 @@ | |||
28 | #include "amdgpu.h" | 28 | #include "amdgpu.h" |
29 | #include "amdgpu_trace.h" | 29 | #include "amdgpu_trace.h" |
30 | 30 | ||
31 | static void amdgpu_job_free_handler(struct work_struct *ws) | ||
32 | { | ||
33 | struct amdgpu_job *job = container_of(ws, struct amdgpu_job, base.work_free_job); | ||
34 | kfree(job); | ||
35 | } | ||
36 | |||
31 | int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, | 37 | int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, |
32 | struct amdgpu_job **job) | 38 | struct amdgpu_job **job) |
33 | { | 39 | { |
@@ -45,6 +51,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, unsigned num_ibs, | |||
45 | (*job)->adev = adev; | 51 | (*job)->adev = adev; |
46 | (*job)->ibs = (void *)&(*job)[1]; | 52 | (*job)->ibs = (void *)&(*job)[1]; |
47 | (*job)->num_ibs = num_ibs; | 53 | (*job)->num_ibs = num_ibs; |
54 | INIT_WORK(&(*job)->base.work_free_job, amdgpu_job_free_handler); | ||
48 | 55 | ||
49 | amdgpu_sync_create(&(*job)->sync); | 56 | amdgpu_sync_create(&(*job)->sync); |
50 | 57 | ||
@@ -80,7 +87,9 @@ void amdgpu_job_free(struct amdgpu_job *job) | |||
80 | 87 | ||
81 | amdgpu_bo_unref(&job->uf.bo); | 88 | amdgpu_bo_unref(&job->uf.bo); |
82 | amdgpu_sync_free(&job->sync); | 89 | amdgpu_sync_free(&job->sync); |
83 | kfree(job); | 90 | |
91 | if (!job->base.use_sched) | ||
92 | kfree(job); | ||
84 | } | 93 | } |
85 | 94 | ||
86 | int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, | 95 | int amdgpu_job_submit(struct amdgpu_job *job, struct amdgpu_ring *ring, |