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>
This commit is contained in:

committed by
Matthew Wilcox

parent
f1241c87a1
commit
b17170b2fa
@@ -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;
|
||||
};
|
||||
|
||||
|
Reference in New Issue
Block a user