diff options
Diffstat (limited to 'drivers/gpu/drm/etnaviv')
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 10 |
2 files changed, 4 insertions, 10 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c index db40cd1c14fd..5a351b0f1087 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c @@ -229,6 +229,7 @@ static int submit_pin_objects(struct etnaviv_gem_submit *submit) ret = PTR_ERR(mapping); break; } + atomic_inc(&etnaviv_obj->gpu_active); submit->bos[i].flags |= BO_PINNED; submit->bos[i].mapping = mapping; @@ -363,6 +364,7 @@ static void submit_cleanup(struct kref *kref) /* unpin all objects */ if (submit->bos[i].flags & BO_PINNED) { etnaviv_gem_mapping_unreference(submit->bos[i].mapping); + atomic_dec(&etnaviv_obj->gpu_active); submit->bos[i].mapping = NULL; submit->bos[i].flags &= ~BO_PINNED; } @@ -372,6 +374,8 @@ static void submit_cleanup(struct kref *kref) drm_gem_object_put_unlocked(&etnaviv_obj->base); } + wake_up_all(&submit->gpu->fence_event); + if (submit->in_fence) dma_fence_put(submit->in_fence); if (submit->out_fence) diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index efa79af676d6..5742e023c5d8 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -1201,7 +1201,6 @@ static void retire_worker(struct work_struct *work) retire_work); u32 fence = gpu->completed_fence; struct etnaviv_gem_submit *submit, *tmp; - unsigned int i; mutex_lock(&gpu->lock); list_for_each_entry_safe(submit, tmp, &gpu->active_submit_list, node) { @@ -1210,9 +1209,6 @@ static void retire_worker(struct work_struct *work) list_del(&submit->node); - for (i = 0; i < submit->nr_bos; i++) - atomic_dec(&submit->bos[i].obj->gpu_active); - etnaviv_submit_put(submit); /* * We need to balance the runtime PM count caused by @@ -1227,8 +1223,6 @@ static void retire_worker(struct work_struct *work) gpu->retired_fence = fence; mutex_unlock(&gpu->lock); - - wake_up_all(&gpu->fence_event); } int etnaviv_gpu_wait_fence_interruptible(struct etnaviv_gpu *gpu, @@ -1429,10 +1423,6 @@ int etnaviv_gpu_submit(struct etnaviv_gpu *gpu, /* We're committed to adding this command buffer, hold a PM reference */ pm_runtime_get_noresume(gpu->dev); - for (i = 0; i < submit->nr_bos; i++) { - struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj; - atomic_inc(&etnaviv_obj->gpu_active); - } hangcheck_timer_reset(gpu); ret = 0; |