]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/mutex.c
hpt366: fix PCI clock detection for HPT374 (take 4)
[linux-2.6-omap-h63xx.git] / kernel / mutex.c
index 303eab18484b1c63b7a678bf2b24a928cfc847fa..691b86564dd97fbe8f88e75a0f1cd6024cf6762b 100644 (file)
@@ -139,6 +139,12 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass)
        list_add_tail(&waiter.list, &lock->wait_list);
        waiter.task = task;
 
+       old_val = atomic_xchg(&lock->count, -1);
+       if (old_val == 1)
+               goto done;
+
+       lock_contended(&lock->dep_map, _RET_IP_);
+
        for (;;) {
                /*
                 * Lets try to take the lock again - this is needed even if
@@ -174,6 +180,8 @@ __mutex_lock_common(struct mutex *lock, long state, unsigned int subclass)
                spin_lock_mutex(&lock->wait_lock, flags);
        }
 
+done:
+       lock_acquired(&lock->dep_map);
        /* got the lock - rejoice! */
        mutex_remove_waiter(lock, &waiter, task_thread_info(task));
        debug_mutex_set_owner(lock, task_thread_info(task));