On Mon, Nov 26, 2012 at 02:19:08PM +0100, Terje Bergstrom wrote:
+void nvhost_intr_stop(struct nvhost_intr *intr) +{
unsigned int id;
struct nvhost_intr_syncpt *syncpt;
u32 nb_pts = nvhost_syncpt_nb_pts(&intr_to_dev(intr)->syncpt);
mutex_lock(&intr->mutex);
intr_op().disable_all_syncpt_intrs(intr);
for (id = 0, syncpt = intr->syncpt;
id < nb_pts;
++id, ++syncpt) {
struct nvhost_waitlist *waiter, *next;
list_for_each_entry_safe(waiter, next,
&syncpt->wait_head, list) {
if (atomic_cmpxchg(&waiter->state,
WLS_CANCELLED, WLS_HANDLED)
== WLS_CANCELLED) {
list_del(&waiter->list);
kref_put(&waiter->refcount, waiter_release);
}
}
if (!list_empty(&syncpt->wait_head)) { /* output diagnostics */
pr_warn("%s cannot stop syncpt intr id=%d\n",
__func__, id);
return;
mutex_unlock() missing before return.
-Sivaram