summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorMatthew Wilcox <matthew@wil.cx>2008-03-14 14:35:22 -0400
committerMatthew Wilcox <willy@linux.intel.com>2008-04-17 10:42:54 -0400
commitb17170b2fac96705db3188f093f89e8e838418e4 (patch)
tree3264d8a297cff20338b606559274c36fbf663f04 /include
parentf1241c87a16c4fe9f4f51d6ed3589f031c505e8d (diff)
Simplify semaphore implementation
By removing the negative values of 'count' and relying on the wait_list to indicate whether we have any waiters, we can simplify the implementation by removing the protection against an unlikely race condition. Thanks to David Howells for his suggestions. Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Diffstat (limited to 'include')
-rw-r--r--include/linux/semaphore.h9
1 files changed, 3 insertions, 6 deletions
diff --git a/include/linux/semaphore.h b/include/linux/semaphore.h
index a107aebd914..a7125daaff9 100644
--- a/include/linux/semaphore.h
+++ b/include/linux/semaphore.h
@@ -15,15 +15,12 @@
/*
* The spinlock controls access to the other members of the semaphore.
- * 'count' is decremented by every task which calls down*() and incremented
- * by every call to up(). Thus, if it is positive, it indicates how many
- * more tasks may acquire the lock. If it is negative, it indicates how
- * many tasks are waiting for the lock. Tasks waiting for the lock are
- * kept on the wait_list.
+ * 'count' represents how many more tasks can acquire this semaphore.
+ * Tasks waiting for the lock are kept on the wait_list.
*/
struct semaphore {
spinlock_t lock;
- int count;
+ unsigned int count;
struct list_head wait_list;
};