Module Name: src
Committed By: pooka
Date: Thu May 2 22:07:58 UTC 2013
Modified Files:
src/lib/librumpuser: rumpuser_pth.c
Log Message:
reorder for better locality. no functional change.
To generate a diff of this commit:
cvs rdiff -u -r1.25 -r1.26 src/lib/librumpuser/rumpuser_pth.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/lib/librumpuser/rumpuser_pth.c
diff -u src/lib/librumpuser/rumpuser_pth.c:1.25 src/lib/librumpuser/rumpuser_pth.c:1.26
--- src/lib/librumpuser/rumpuser_pth.c:1.25 Thu May 2 21:35:19 2013
+++ src/lib/librumpuser/rumpuser_pth.c Thu May 2 22:07:57 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: rumpuser_pth.c,v 1.25 2013/05/02 21:35:19 pooka Exp $ */
+/* $NetBSD: rumpuser_pth.c,v 1.26 2013/05/02 22:07:57 pooka Exp $ */
/*
* Copyright (c) 2007-2010 Antti Kantee. All Rights Reserved.
@@ -28,7 +28,7 @@
#include "rumpuser_port.h"
#if !defined(lint)
-__RCSID("$NetBSD: rumpuser_pth.c,v 1.25 2013/05/02 21:35:19 pooka Exp $");
+__RCSID("$NetBSD: rumpuser_pth.c,v 1.26 2013/05/02 22:07:57 pooka Exp $");
#endif /* !lint */
#include <sys/queue.h>
@@ -47,64 +47,6 @@ __RCSID("$NetBSD: rumpuser_pth.c,v 1.25
#include "rumpuser_int.h"
-static pthread_key_t curlwpkey;
-
-struct rumpuser_mtx {
- pthread_mutex_t pthmtx;
- struct lwp *owner;
- int flags;
-};
-
-#define RURW_AMWRITER(rw) (rw->writer == rumpuser_curlwp() \
- && rw->readers == -1)
-#define RURW_HASREAD(rw) (rw->readers > 0)
-
-#define RURW_SETWRITE(rw) \
-do { \
- assert(rw->readers == 0); \
- rw->writer = rumpuser_curlwp(); \
- rw->readers = -1; \
-} while (/*CONSTCOND*/0)
-#define RURW_CLRWRITE(rw) \
-do { \
- assert(RURW_AMWRITER(rw)); \
- rw->readers = 0; \
- rw->writer = NULL; \
-} while (/*CONSTCOND*/0)
-#define RURW_INCREAD(rw) \
-do { \
- pthread_spin_lock(&rw->spin); \
- assert(rw->readers >= 0); \
- ++(rw)->readers; \
- pthread_spin_unlock(&rw->spin); \
-} while (/*CONSTCOND*/0)
-#define RURW_DECREAD(rw) \
-do { \
- pthread_spin_lock(&rw->spin); \
- assert(rw->readers > 0); \
- --(rw)->readers; \
- pthread_spin_unlock(&rw->spin); \
-} while (/*CONSTCOND*/0)
-
-struct rumpuser_rw {
- pthread_rwlock_t pthrw;
- pthread_spinlock_t spin;
- int readers;
- struct lwp *writer;
-};
-
-struct rumpuser_cv {
- pthread_cond_t pthcv;
- int nwaiters;
-};
-
-void
-rumpuser__thrinit(void)
-{
-
- pthread_key_create(&curlwpkey, NULL);
-}
-
int
rumpuser_thread_create(void *(*f)(void *), void *arg, const char *thrname,
int joinable, int priority, int cpuidx, void **ptcookie)
@@ -170,6 +112,12 @@ rumpuser_thread_join(void *ptcookie)
ET(rv);
}
+struct rumpuser_mtx {
+ pthread_mutex_t pthmtx;
+ struct lwp *owner;
+ int flags;
+};
+
void
rumpuser_mutex_init(struct rumpuser_mtx **mtx, int flags)
{
@@ -274,6 +222,48 @@ rumpuser_mutex_owner(struct rumpuser_mtx
*lp = mtx->owner;
}
+/*
+ * rwlocks
+ */
+
+struct rumpuser_rw {
+ pthread_rwlock_t pthrw;
+ pthread_spinlock_t spin;
+ int readers;
+ struct lwp *writer;
+};
+
+#define RURW_AMWRITER(rw) (rw->writer == rumpuser_curlwp() \
+ && rw->readers == -1)
+#define RURW_HASREAD(rw) (rw->readers > 0)
+
+#define RURW_SETWRITE(rw) \
+do { \
+ assert(rw->readers == 0); \
+ rw->writer = rumpuser_curlwp(); \
+ rw->readers = -1; \
+} while (/*CONSTCOND*/0)
+#define RURW_CLRWRITE(rw) \
+do { \
+ assert(RURW_AMWRITER(rw)); \
+ rw->readers = 0; \
+ rw->writer = NULL; \
+} while (/*CONSTCOND*/0)
+#define RURW_INCREAD(rw) \
+do { \
+ pthread_spin_lock(&rw->spin); \
+ assert(rw->readers >= 0); \
+ ++(rw)->readers; \
+ pthread_spin_unlock(&rw->spin); \
+} while (/*CONSTCOND*/0)
+#define RURW_DECREAD(rw) \
+do { \
+ pthread_spin_lock(&rw->spin); \
+ assert(rw->readers > 0); \
+ --(rw)->readers; \
+ pthread_spin_unlock(&rw->spin); \
+} while (/*CONSTCOND*/0)
+
void
rumpuser_rw_init(struct rumpuser_rw **rw)
{
@@ -386,6 +376,15 @@ rumpuser_rw_held(struct rumpuser_rw *rw,
}
}
+/*
+ * condvar
+ */
+
+struct rumpuser_cv {
+ pthread_cond_t pthcv;
+ int nwaiters;
+};
+
void
rumpuser_cv_init(struct rumpuser_cv **cv)
{
@@ -522,6 +521,8 @@ rumpuser_cv_has_waiters(struct rumpuser_
* curlwp
*/
+static pthread_key_t curlwpkey;
+
/*
* the if0'd curlwp implementation is not used by this hypervisor,
* but serves as test code to check that the intended usage works.
@@ -625,3 +626,10 @@ rumpuser_curlwp(void)
return pthread_getspecific(curlwpkey);
}
#endif
+
+
+void
+rumpuser__thrinit(void)
+{
+ pthread_key_create(&curlwpkey, NULL);
+}