docs: kernel-locking: Convert semaphore references

I converted some of the document to reflect mutex usage instead of
semaphore usage.  Since we shouldin't be promoting semaphore usage when
it's on it's way out..

Signed-off-by: Daniel Walker <dwalker@mvista.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Daniel Walker 2008-02-06 01:37:39 -08:00 committed by Linus Torvalds
parent ec5b1157f8
commit 66656ebb5b

View file

@ -717,7 +717,7 @@ used, and when it gets full, throws out the least used one.
<para> <para>
For our first example, we assume that all operations are in user For our first example, we assume that all operations are in user
context (ie. from system calls), so we can sleep. This means we can context (ie. from system calls), so we can sleep. This means we can
use a semaphore to protect the cache and all the objects within use a mutex to protect the cache and all the objects within
it. Here's the code: it. Here's the code:
</para> </para>
@ -725,7 +725,7 @@ it. Here's the code:
#include &lt;linux/list.h&gt; #include &lt;linux/list.h&gt;
#include &lt;linux/slab.h&gt; #include &lt;linux/slab.h&gt;
#include &lt;linux/string.h&gt; #include &lt;linux/string.h&gt;
#include &lt;asm/semaphore.h&gt; #include &lt;linux/mutex.h&gt;
#include &lt;asm/errno.h&gt; #include &lt;asm/errno.h&gt;
struct object struct object
@ -737,7 +737,7 @@ struct object
}; };
/* Protects the cache, cache_num, and the objects within it */ /* Protects the cache, cache_num, and the objects within it */
static DECLARE_MUTEX(cache_lock); static DEFINE_MUTEX(cache_lock);
static LIST_HEAD(cache); static LIST_HEAD(cache);
static unsigned int cache_num = 0; static unsigned int cache_num = 0;
#define MAX_CACHE_SIZE 10 #define MAX_CACHE_SIZE 10
@ -789,17 +789,17 @@ int cache_add(int id, const char *name)
obj-&gt;id = id; obj-&gt;id = id;
obj-&gt;popularity = 0; obj-&gt;popularity = 0;
down(&amp;cache_lock); mutex_lock(&amp;cache_lock);
__cache_add(obj); __cache_add(obj);
up(&amp;cache_lock); mutex_unlock(&amp;cache_lock);
return 0; return 0;
} }
void cache_delete(int id) void cache_delete(int id)
{ {
down(&amp;cache_lock); mutex_lock(&amp;cache_lock);
__cache_delete(__cache_find(id)); __cache_delete(__cache_find(id));
up(&amp;cache_lock); mutex_unlock(&amp;cache_lock);
} }
int cache_find(int id, char *name) int cache_find(int id, char *name)
@ -807,13 +807,13 @@ int cache_find(int id, char *name)
struct object *obj; struct object *obj;
int ret = -ENOENT; int ret = -ENOENT;
down(&amp;cache_lock); mutex_lock(&amp;cache_lock);
obj = __cache_find(id); obj = __cache_find(id);
if (obj) { if (obj) {
ret = 0; ret = 0;
strcpy(name, obj-&gt;name); strcpy(name, obj-&gt;name);
} }
up(&amp;cache_lock); mutex_unlock(&amp;cache_lock);
return ret; return ret;
} }
</programlisting> </programlisting>
@ -853,7 +853,7 @@ The change is shown below, in standard patch format: the
int popularity; int popularity;
}; };
-static DECLARE_MUTEX(cache_lock); -static DEFINE_MUTEX(cache_lock);
+static spinlock_t cache_lock = SPIN_LOCK_UNLOCKED; +static spinlock_t cache_lock = SPIN_LOCK_UNLOCKED;
static LIST_HEAD(cache); static LIST_HEAD(cache);
static unsigned int cache_num = 0; static unsigned int cache_num = 0;
@ -870,22 +870,22 @@ The change is shown below, in standard patch format: the
obj-&gt;id = id; obj-&gt;id = id;
obj-&gt;popularity = 0; obj-&gt;popularity = 0;
- down(&amp;cache_lock); - mutex_lock(&amp;cache_lock);
+ spin_lock_irqsave(&amp;cache_lock, flags); + spin_lock_irqsave(&amp;cache_lock, flags);
__cache_add(obj); __cache_add(obj);
- up(&amp;cache_lock); - mutex_unlock(&amp;cache_lock);
+ spin_unlock_irqrestore(&amp;cache_lock, flags); + spin_unlock_irqrestore(&amp;cache_lock, flags);
return 0; return 0;
} }
void cache_delete(int id) void cache_delete(int id)
{ {
- down(&amp;cache_lock); - mutex_lock(&amp;cache_lock);
+ unsigned long flags; + unsigned long flags;
+ +
+ spin_lock_irqsave(&amp;cache_lock, flags); + spin_lock_irqsave(&amp;cache_lock, flags);
__cache_delete(__cache_find(id)); __cache_delete(__cache_find(id));
- up(&amp;cache_lock); - mutex_unlock(&amp;cache_lock);
+ spin_unlock_irqrestore(&amp;cache_lock, flags); + spin_unlock_irqrestore(&amp;cache_lock, flags);
} }
@ -895,14 +895,14 @@ The change is shown below, in standard patch format: the
int ret = -ENOENT; int ret = -ENOENT;
+ unsigned long flags; + unsigned long flags;
- down(&amp;cache_lock); - mutex_lock(&amp;cache_lock);
+ spin_lock_irqsave(&amp;cache_lock, flags); + spin_lock_irqsave(&amp;cache_lock, flags);
obj = __cache_find(id); obj = __cache_find(id);
if (obj) { if (obj) {
ret = 0; ret = 0;
strcpy(name, obj-&gt;name); strcpy(name, obj-&gt;name);
} }
- up(&amp;cache_lock); - mutex_unlock(&amp;cache_lock);
+ spin_unlock_irqrestore(&amp;cache_lock, flags); + spin_unlock_irqrestore(&amp;cache_lock, flags);
return ret; return ret;
} }