diff options
author | Chunming Zhou <david1.zhou@amd.com> | 2015-08-31 15:46:12 +0800 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-09-02 12:19:53 -0400 |
commit | c9f0fe5e19ec485476c3b22e9265016b96c813ef (patch) | |
tree | 729af75ef92d2d5648c1679ed2a25f96b2ca9b09 /drivers/gpu/drm/amd/scheduler | |
parent | 4c28fb0b27ad58d772cb972564369b9ebdad0d6b (diff) | |
download | op-kernel-dev-c9f0fe5e19ec485476c3b22e9265016b96c813ef.zip op-kernel-dev-c9f0fe5e19ec485476c3b22e9265016b96c813ef.tar.gz |
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/drm/amd/scheduler')
-rw-r--r-- | drivers/gpu/drm/amd/scheduler/gpu_scheduler.c | 7 |
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 2f5d1f0..ab8577f 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; } /** |