PERFORCE change 111480 for review
Todd Miller
millert at FreeBSD.org
Mon Dec 11 14:14:40 PST 2006
http://perforce.freebsd.org/chv.cgi?CH=111480
Change 111480 by millert at millert_g5tower on 2006/12/11 21:38:20
Convert to tiger-style mutexes.
Affected files ...
.. //depot/projects/trustedbsd/sedarwin8/darwin/xnu/bsd/kern/kern_condvar.c#2 edit
.. //depot/projects/trustedbsd/sedarwin8/darwin/xnu/bsd/sys/condvar.h#2 edit
.. //depot/projects/trustedbsd/sedarwin8/darwin/xnu/security/mac_base.c#26 edit
.. //depot/projects/trustedbsd/sedarwin8/darwin/xnu/security/mac_internal.h#10 edit
Differences ...
==== //depot/projects/trustedbsd/sedarwin8/darwin/xnu/bsd/kern/kern_condvar.c#2 (text+ko) ====
@@ -38,7 +38,7 @@
#include <sys/condvar.h>
#include <kern/debug.h>
-#include <kern/lock.h>
+#include <kern/locks.h>
#include <kern/sched_prim.h>
#include <string.h>
@@ -70,26 +70,26 @@
}
void
-cv_wait(struct cv *cvp, mutex_t *mp)
+cv_wait(struct cv *cvp, lck_mtx_t *mp)
{
int ret;
- mutex_unlock(mp);
+ lck_mtx_lock(mp);
ret = wait_queue_assert_wait(cvp->cv_wait_queue, 0, THREAD_UNINT, 0);
if (ret != THREAD_WAITING)
panic("cv_wait: wait_queue_assert_wait failed");
ret = thread_block(THREAD_CONTINUE_NULL);
if (ret != THREAD_AWAKENED)
panic("cv_wait: thread_block failed");
- mutex_lock(mp);
+ lck_mtx_unlock(mp);
}
int
-cv_wait_sig(struct cv *cvp, mutex_t *mp)
+cv_wait_sig(struct cv *cvp, lck_mtx_t *mp)
{
int ret;
- mutex_unlock(mp);
+ lck_mtx_unlock(mp);
ret = wait_queue_assert_wait(cvp->cv_wait_queue, 0,
THREAD_INTERRUPTIBLE, 0);
if (ret != THREAD_WAITING)
@@ -97,14 +97,14 @@
ret = thread_block(THREAD_CONTINUE_NULL);
if (ret != THREAD_AWAKENED)
panic("cv_wait: thread_block failed");
- mutex_lock(mp);
+ lck_mtx_lock(mp);
}
/*
* Not supported in Darwin right now.
*/
int
-cv_timedwait(struct cv *cvp __unused, mutex_t *mp __unused, int timo __unused)
+cv_timedwait(struct cv *cvp __unused, lck_mtx_t *mp __unused, int timo __unused)
{
panic("cv_timedwait: not currently supported");
@@ -114,7 +114,7 @@
* Not supported in Darwin right now.
*/
int
-cv_timedwait_sig(struct cv *cvp __unused, mutex_t *mp __unused, int timo __unused)
+cv_timedwait_sig(struct cv *cvp __unused, lck_mtx_t *mp __unused, int timo __unused)
{
panic("cv_timedwait: not currently supported");
==== //depot/projects/trustedbsd/sedarwin8/darwin/xnu/bsd/sys/condvar.h#2 (text+ko) ====
@@ -34,22 +34,22 @@
* Implement BSD-layer condition variables using Mach-layer wait queues.
*/
-#include <kern/lock.h>
+#include <kern/locks.h>
#include <kern/wait_queue.h>
struct cv {
wait_queue_t cv_wait_queue;
- mutex_t *cv_mutex; /* Debugging only. */
+ lck_mtx_t *cv_mutex; /* Debugging only. */
const char *cv_description;
};
struct uthread;
void cv_init(struct cv *cvp, const char *desc);
void cv_destroy(struct cv *cvp);
-void cv_wait(struct cv *cvp, mutex_t *mp);
-int cv_wait_sig(struct cv *cvp, mutex_t *mp);
-int cv_timedwait(struct cv *cvp, mutex_t *mp, int timo);
-int cv_timedwait_sig(struct cv *cvp, mutex_t *mp, int timo);
+void cv_wait(struct cv *cvp, lck_mtx_t *mp);
+int cv_wait_sig(struct cv *cvp, lck_mtx_t *mp);
+int cv_timedwait(struct cv *cvp, lck_mtx_t *mp, int timo);
+int cv_timedwait_sig(struct cv *cvp, lck_mtx_t *mp, int timo);
void cv_signal(struct cv *cvp);
void cv_broadcast(struct cv *cvp);
void cv_waitq_remove(struct uthread *td);
==== //depot/projects/trustedbsd/sedarwin8/darwin/xnu/security/mac_base.c#26 (text+ko) ====
@@ -174,7 +174,7 @@
* that they should try to acquire the lock if a first attempt at
* exclusive access fails.
*/
-static mutex_t *mac_policy_mtx;
+static lck_mtx_t *mac_policy_mtx;
static struct cv mac_policy_cv;
/*
@@ -312,7 +312,7 @@
static __inline void
mac_policy_grab_exclusive(void)
{
- mutex_lock(mac_policy_mtx);
+ lck_mtx_lock(mac_policy_mtx);
while (mac_policy_busy != 0)
cv_wait(&mac_policy_cv, mac_policy_mtx);
}
@@ -331,16 +331,16 @@
KASSERT(mac_policy_busy == 0,
("mac_policy_release_exclusive(): not exclusive"));
- mutex_unlock(mac_policy_mtx);
+ lck_mtx_unlock(mac_policy_mtx);
cv_signal(&mac_policy_cv);
}
void
mac_policy_list_busy(void)
{
- mutex_lock(mac_policy_mtx);
+ lck_mtx_lock(mac_policy_mtx);
mac_policy_busy++;
- mutex_unlock(mac_policy_mtx);
+ lck_mtx_unlock(mac_policy_mtx);
}
int
@@ -348,7 +348,7 @@
{
int ret;
- if (!mutex_try(mac_policy_mtx))
+ if (!lck_mtx_try_lock(mac_policy_mtx))
return (-1);
if (mac_policy_list.numloaded > mac_policy_list.staticmax) {
@@ -356,7 +356,7 @@
ret = 1;
} else
ret = 0;
- mutex_unlock(mac_policy_mtx);
+ lck_mtx_unlock(mac_policy_mtx);
return (ret);
}
@@ -365,25 +365,25 @@
{
int ret;
- mutex_lock(mac_policy_mtx);
+ lck_mtx_lock(mac_policy_mtx);
if (mac_policy_list.numloaded > mac_policy_list.staticmax) {
mac_policy_busy++;
ret = 1;
} else
ret = 0;
- mutex_unlock(mac_policy_mtx);
+ lck_mtx_unlock(mac_policy_mtx);
return (ret);
}
void
mac_policy_list_unbusy(void)
{
- mutex_lock(mac_policy_mtx);
+ lck_mtx_lock(mac_policy_mtx);
mac_policy_busy--;
KASSERT(mac_policy_busy >= 0, ("MAC_POLICY_LIST_LOCK"));
if (mac_policy_busy == 0)
cv_signal(&mac_policy_cv);
- mutex_unlock(mac_policy_mtx);
+ lck_mtx_unlock(mac_policy_mtx);
}
/*
@@ -392,6 +392,9 @@
void
mac_policy_init(void)
{
+ lck_grp_attr_t *mac_lck_grp_attr;
+ lck_attr_t *mac_lck_attr;
+ lck_grp_t *mac_lck_grp;
mac_policy_list.numloaded = 0;
mac_policy_list.max = MAC_POLICY_LIST_CHUNKSIZE;
@@ -407,7 +410,16 @@
LIST_INIT(&mac_static_label_element_list);
TAILQ_INIT(&mac_label_journal_list);
- mac_policy_mtx = mutex_alloc(ETAP_NO_TRACE);
+ mac_lck_grp_attr = lck_grp_attr_alloc_init();
+ lck_grp_attr_setstat(mac_lck_grp_attr);
+ mac_lck_grp = lck_grp_alloc_init("MAC lock", mac_lck_grp_attr);
+ mac_lck_attr = lck_attr_alloc_init();
+ lck_attr_setdefault(mac_lck_attr);
+ mac_policy_mtx = lck_mtx_alloc_init(mac_lck_grp, mac_lck_attr);
+ lck_attr_free(mac_lck_attr);
+ lck_grp_attr_free(mac_lck_grp_attr);
+ lck_grp_free(mac_lck_grp);
+
mac_labelzone_init();
}
==== //depot/projects/trustedbsd/sedarwin8/darwin/xnu/security/mac_internal.h#10 (text+ko) ====
@@ -49,7 +49,7 @@
#include <security/mac_data.h>
#include <sys/sysctl.h>
#include <kern/wait_queue.h>
-#include <kern/lock.h>
+#include <kern/locks.h>
#include <sys/kernel.h>
#include <sys/lock.h>
#include <sys/malloc.h>
More information about the trustedbsd-cvs
mailing list