aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorChunming Zhou <david1.zhou@amd.com>2015-08-31 15:46:12 +0800
committerAlex Deucher <alexander.deucher@amd.com>2015-09-02 12:19:53 -0400
commitc9f0fe5e19ec485476c3b22e9265016b96c813ef (patch)
tree729af75ef92d2d5648c1679ed2a25f96b2ca9b09 /drivers/gpu
parentdrm/amdgpu: fix amdgpu_bo_unreserve order in GEM_OP IOCTL v2 (diff)
downloadlinux-dev-c9f0fe5e19ec485476c3b22e9265016b96c813ef.tar.xz
linux-dev-c9f0fe5e19ec485476c3b22e9265016b96c813ef.zip
drm/amdgpu: make wait_event uninterruptible in push_job
with interruptible, the push_job maybe return -ERESTARTSYS, then result in push_job error. E.g. bug trace: [ 181.618860] *****amdgpu_copy_buffer:fence->seq:0x0000000048d8758b, contxt:1207959552, ref:683967304, r:-512 [ 181.618929] BUG: unable to handle kernel paging request at ffffffff811aa266 [ 181.625887] IP: [<ffffffff81548ffc>] reservation_object_add_excl_fence+0x3c/0x120 ... [ 181.859767] [<ffffffff811aa266>] ? unmap_mapping_range+0x66/0x110 [ 181.865928] [<ffffffffc0608ac1>] ttm_bo_move_accel_cleanup+0x41/0x3c0 [ttm] [ 181.872971] [<ffffffffc062d382>] amdgpu_move_blit.isra.18+0x122/0x150 [amdgpu] [ 181.880254] [<ffffffff811aa266>] ? unmap_mapping_range+0x66/0x110 [ 181.886420] [<ffffffffc062d709>] amdgpu_bo_move+0xa9/0x200 [amdgpu] [ 181.892753] [<ffffffffc0606e8d>] ttm_bo_handle_move_mem+0x26d/0x5c0 [ttm] Signed-off-by: Chunming Zhou <david1.zhou@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/amd/scheduler/gpu_scheduler.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
index 2f5d1f0da8e5..ab8577f8ed4a 100644
--- a/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
+++ b/drivers/gpu/drm/amd/scheduler/gpu_scheduler.c
@@ -264,7 +264,6 @@ int amd_sched_entity_push_job(struct amd_sched_job *sched_job)
struct amd_sched_entity *entity = sched_job->s_entity;
struct amd_sched_fence *fence = amd_sched_fence_create(
entity, sched_job->owner);
- int r;
if (!fence)
return -ENOMEM;
@@ -272,10 +271,10 @@ int amd_sched_entity_push_job(struct amd_sched_job *sched_job)
fence_get(&fence->base);
sched_job->s_fence = fence;
- r = wait_event_interruptible(entity->scheduler->job_scheduled,
- amd_sched_entity_in(sched_job));
+ wait_event(entity->scheduler->job_scheduled,
+ amd_sched_entity_in(sched_job));
- return r;
+ return 0;
}
/**