/*
* Color decompression engine support
*
- * Copyright (c) 2014-2015, NVIDIA Corporation. All rights reserved.
+ * Copyright (c) 2014-2016, NVIDIA Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify it
* under the terms and conditions of the GNU General Public License,
struct gk20a_cde_app *cde_app = &g->cde_app;
bool channel_idle;
- mutex_lock(&ch->jobs_lock);
+ spin_lock(&ch->jobs_lock);
channel_idle = list_empty(&ch->jobs);
- mutex_unlock(&ch->jobs_lock);
+ spin_unlock(&ch->jobs_lock);
if (!channel_idle)
return;
/* release all job semaphores (applies only to jobs that use
semaphore synchronization) */
- mutex_lock(&ch->jobs_lock);
+ spin_lock(&ch->jobs_lock);
list_for_each_entry_safe(job, n, &ch->jobs, list) {
if (job->post_fence->semaphore) {
gk20a_semaphore_release(job->post_fence->semaphore);
released_job_semaphore = true;
}
}
- mutex_unlock(&ch->jobs_lock);
+ spin_unlock(&ch->jobs_lock);
if (released_job_semaphore)
wake_up_interruptible_all(&ch->semaphore_wq);
msecs_to_jiffies(gk20a_get_gr_idle_timeout(ch->g));
do {
- mutex_lock(&ch->jobs_lock);
+ spin_lock(&ch->jobs_lock);
channel_idle = list_empty(&ch->jobs);
- mutex_unlock(&ch->jobs_lock);
+ spin_unlock(&ch->jobs_lock);
if (channel_idle)
break;
job->wait_cmd = wait_cmd;
job->incr_cmd = incr_cmd;
- mutex_lock(&c->jobs_lock);
+ spin_lock(&c->jobs_lock);
list_add_tail(&job->list, &c->jobs);
- mutex_unlock(&c->jobs_lock);
+ spin_unlock(&c->jobs_lock);
} else {
return -ETIMEDOUT;
}
while (1) {
bool completed;
- mutex_lock(&c->jobs_lock);
+ spin_lock(&c->jobs_lock);
if (list_empty(&c->jobs)) {
- mutex_unlock(&c->jobs_lock);
+ spin_unlock(&c->jobs_lock);
break;
}
job = list_first_entry(&c->jobs,
struct channel_gk20a_job, list);
- mutex_unlock(&c->jobs_lock);
+ spin_unlock(&c->jobs_lock);
completed = gk20a_fence_is_expired(job->post_fence);
if (!completed)
* so this wouldn't get freed here. */
gk20a_channel_put(c);
- mutex_lock(&c->jobs_lock);
+ spin_lock(&c->jobs_lock);
list_del_init(&job->list);
- mutex_unlock(&c->jobs_lock);
+ spin_unlock(&c->jobs_lock);
kfree(job);
c->referenceable = false;
init_waitqueue_head(&c->ref_count_dec_wq);
mutex_init(&c->ioctl_lock);
- mutex_init(&c->jobs_lock);
+ spin_lock_init(&c->jobs_lock);
mutex_init(&c->last_submit.fence_lock);
INIT_DELAYED_WORK(&c->clean_up.wq, gk20a_channel_clean_up_jobs);
mutex_init(&c->clean_up.lock);