summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_mutex.c
diff options
context:
space:
mode:
authordavide <davide@FreeBSD.org>2013-09-20 23:06:21 +0000
committerdavide <davide@FreeBSD.org>2013-09-20 23:06:21 +0000
commit5273d359fdd82fc7a93ff0f694844d25a2e17c59 (patch)
tree0f8acc1728a85e0911253a1fa7cfe9c10d2c05b4 /sys/kern/kern_mutex.c
parent7ed30adae7eb0c6e156983ca0c96c04e1e6a8e0d (diff)
downloadFreeBSD-src-5273d359fdd82fc7a93ff0f694844d25a2e17c59.zip
FreeBSD-src-5273d359fdd82fc7a93ff0f694844d25a2e17c59.tar.gz
Fix lc_lock/lc_unlock() support for rmlocks held in shared mode. With
current lock classes KPI it was really difficult because there was no way to pass an rmtracker object to the lock/unlock routines. In order to accomplish the task, modify the aforementioned functions so that they can return (or pass as argument) an uinptr_t, which is in the rm case used to hold a pointer to struct rm_priotracker for current thread. As an added bonus, this fixes rm_sleep() in the rm shared case, which right now can communicate priotracker structure between lc_unlock()/lc_lock(). Suggested by: jhb Reviewed by: jhb Approved by: re (delphij)
Diffstat (limited to 'sys/kern/kern_mutex.c')
-rw-r--r--sys/kern/kern_mutex.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/sys/kern/kern_mutex.c b/sys/kern/kern_mutex.c
index cd1ed7d..e61a187 100644
--- a/sys/kern/kern_mutex.c
+++ b/sys/kern/kern_mutex.c
@@ -101,14 +101,14 @@ static void assert_mtx(const struct lock_object *lock, int what);
#ifdef DDB
static void db_show_mtx(const struct lock_object *lock);
#endif
-static void lock_mtx(struct lock_object *lock, int how);
-static void lock_spin(struct lock_object *lock, int how);
+static void lock_mtx(struct lock_object *lock, uintptr_t how);
+static void lock_spin(struct lock_object *lock, uintptr_t how);
#ifdef KDTRACE_HOOKS
static int owner_mtx(const struct lock_object *lock,
struct thread **owner);
#endif
-static int unlock_mtx(struct lock_object *lock);
-static int unlock_spin(struct lock_object *lock);
+static uintptr_t unlock_mtx(struct lock_object *lock);
+static uintptr_t unlock_spin(struct lock_object *lock);
/*
* Lock classes for sleep and spin mutexes.
@@ -154,20 +154,20 @@ assert_mtx(const struct lock_object *lock, int what)
}
void
-lock_mtx(struct lock_object *lock, int how)
+lock_mtx(struct lock_object *lock, uintptr_t how)
{
mtx_lock((struct mtx *)lock);
}
void
-lock_spin(struct lock_object *lock, int how)
+lock_spin(struct lock_object *lock, uintptr_t how)
{
panic("spin locks can only use msleep_spin");
}
-int
+uintptr_t
unlock_mtx(struct lock_object *lock)
{
struct mtx *m;
@@ -178,7 +178,7 @@ unlock_mtx(struct lock_object *lock)
return (0);
}
-int
+uintptr_t
unlock_spin(struct lock_object *lock)
{
OpenPOWER on IntegriCloud