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:
parent
ec5b1157f8
commit
66656ebb5b
|
@ -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 <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <asm/semaphore.h>
|
#include <linux/mutex.h>
|
||||||
#include <asm/errno.h>
|
#include <asm/errno.h>
|
||||||
|
|
||||||
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->id = id;
|
obj->id = id;
|
||||||
obj->popularity = 0;
|
obj->popularity = 0;
|
||||||
|
|
||||||
down(&cache_lock);
|
mutex_lock(&cache_lock);
|
||||||
__cache_add(obj);
|
__cache_add(obj);
|
||||||
up(&cache_lock);
|
mutex_unlock(&cache_lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cache_delete(int id)
|
void cache_delete(int id)
|
||||||
{
|
{
|
||||||
down(&cache_lock);
|
mutex_lock(&cache_lock);
|
||||||
__cache_delete(__cache_find(id));
|
__cache_delete(__cache_find(id));
|
||||||
up(&cache_lock);
|
mutex_unlock(&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(&cache_lock);
|
mutex_lock(&cache_lock);
|
||||||
obj = __cache_find(id);
|
obj = __cache_find(id);
|
||||||
if (obj) {
|
if (obj) {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
strcpy(name, obj->name);
|
strcpy(name, obj->name);
|
||||||
}
|
}
|
||||||
up(&cache_lock);
|
mutex_unlock(&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->id = id;
|
obj->id = id;
|
||||||
obj->popularity = 0;
|
obj->popularity = 0;
|
||||||
|
|
||||||
- down(&cache_lock);
|
- mutex_lock(&cache_lock);
|
||||||
+ spin_lock_irqsave(&cache_lock, flags);
|
+ spin_lock_irqsave(&cache_lock, flags);
|
||||||
__cache_add(obj);
|
__cache_add(obj);
|
||||||
- up(&cache_lock);
|
- mutex_unlock(&cache_lock);
|
||||||
+ spin_unlock_irqrestore(&cache_lock, flags);
|
+ spin_unlock_irqrestore(&cache_lock, flags);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void cache_delete(int id)
|
void cache_delete(int id)
|
||||||
{
|
{
|
||||||
- down(&cache_lock);
|
- mutex_lock(&cache_lock);
|
||||||
+ unsigned long flags;
|
+ unsigned long flags;
|
||||||
+
|
+
|
||||||
+ spin_lock_irqsave(&cache_lock, flags);
|
+ spin_lock_irqsave(&cache_lock, flags);
|
||||||
__cache_delete(__cache_find(id));
|
__cache_delete(__cache_find(id));
|
||||||
- up(&cache_lock);
|
- mutex_unlock(&cache_lock);
|
||||||
+ spin_unlock_irqrestore(&cache_lock, flags);
|
+ spin_unlock_irqrestore(&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(&cache_lock);
|
- mutex_lock(&cache_lock);
|
||||||
+ spin_lock_irqsave(&cache_lock, flags);
|
+ spin_lock_irqsave(&cache_lock, flags);
|
||||||
obj = __cache_find(id);
|
obj = __cache_find(id);
|
||||||
if (obj) {
|
if (obj) {
|
||||||
ret = 0;
|
ret = 0;
|
||||||
strcpy(name, obj->name);
|
strcpy(name, obj->name);
|
||||||
}
|
}
|
||||||
- up(&cache_lock);
|
- mutex_unlock(&cache_lock);
|
||||||
+ spin_unlock_irqrestore(&cache_lock, flags);
|
+ spin_unlock_irqrestore(&cache_lock, flags);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue