diff --git a/drivers/gpu/nvgpu/common/fifo/channel.c b/drivers/gpu/nvgpu/common/fifo/channel.c index 709fc5fdc..53d05be7f 100644 --- a/drivers/gpu/nvgpu/common/fifo/channel.c +++ b/drivers/gpu/nvgpu/common/fifo/channel.c @@ -1357,8 +1357,6 @@ void nvgpu_channel_clean_up_jobs(struct nvgpu_channel *c, break; } - nvgpu_mutex_acquire(&c->sync_lock); - WARN_ON(c->sync == NULL); if (c->sync != NULL) { @@ -1368,15 +1366,16 @@ void nvgpu_channel_clean_up_jobs(struct nvgpu_channel *c, } if (g->aggressive_sync_destroy_thresh != 0U) { + nvgpu_mutex_acquire(&c->sync_lock); if (nvgpu_channel_sync_put_ref_and_check(c->sync) && g->aggressive_sync_destroy) { nvgpu_channel_sync_destroy(c->sync, false); c->sync = NULL; } + nvgpu_mutex_release(&c->sync_lock); } } - nvgpu_mutex_release(&c->sync_lock); if (job->num_mapped_buffers != 0U) { nvgpu_vm_put_buffers(vm, job->mapped_buffers, diff --git a/drivers/gpu/nvgpu/common/fifo/submit.c b/drivers/gpu/nvgpu/common/fifo/submit.c index 258ae8048..c4ab204ee 100644 --- a/drivers/gpu/nvgpu/common/fifo/submit.c +++ b/drivers/gpu/nvgpu/common/fifo/submit.c @@ -60,17 +60,19 @@ static int nvgpu_submit_prepare_syncs(struct nvgpu_channel *c, bool flag_sync_fence = (flags & NVGPU_SUBMIT_FLAGS_SYNC_FENCE) != 0U; bool flag_fence_wait = (flags & NVGPU_SUBMIT_FLAGS_FENCE_WAIT) != 0U; - nvgpu_mutex_acquire(&c->sync_lock); if (g->aggressive_sync_destroy_thresh != 0U) { + nvgpu_mutex_acquire(&c->sync_lock); if (c->sync == NULL) { c->sync = nvgpu_channel_sync_create(c, false); if (c->sync == NULL) { err = -ENOMEM; + nvgpu_mutex_release(&c->sync_lock); goto fail; } new_sync_created = true; } nvgpu_channel_sync_get_ref(c->sync); + nvgpu_mutex_release(&c->sync_lock); } if ((g->ops.channel.set_syncpt != NULL) && new_sync_created) { @@ -162,7 +164,6 @@ static int nvgpu_submit_prepare_syncs(struct nvgpu_channel *c, goto clean_up_incr_cmd; } - nvgpu_mutex_release(&c->sync_lock); return 0; clean_up_incr_cmd: @@ -181,7 +182,6 @@ clean_up_wait_cmd: job->wait_cmd = NULL; } fail: - nvgpu_mutex_release(&c->sync_lock); *wait_cmd = NULL; return err; }