On some parallel workloads this gives up to a 15% speed improvement.
Signed-off-by: Emilio G. Cota <[email protected]>
---
include/qemu/thread-posix.h | 47 ++++++++++++++++++++++++++++++++++++++++++
include/qemu/thread.h | 6 ------
util/qemu-thread-posix.c | 50 +++++----------------------------------------
3 files changed, 52 insertions(+), 51 deletions(-)
diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
index 8ce8f01..7d3a9f1 100644
--- a/include/qemu/thread-posix.h
+++ b/include/qemu/thread-posix.h
@@ -37,4 +37,51 @@ struct QemuThread {
pthread_t thread;
};
+void qemu_spin_error_exit(int err, const char *msg);
+
+static inline void qemu_spin_init(QemuSpin *spin)
+{
+ int err;
+
+ err = pthread_spin_init(&spin->lock, 0);
+ if (err) {
+ qemu_spin_error_exit(err, __func__);
+ }
+}
+
+static inline void qemu_spin_destroy(QemuSpin *spin)
+{
+ int err;
+
+ err = pthread_spin_destroy(&spin->lock);
+ if (err) {
+ qemu_spin_error_exit(err, __func__);
+ }
+}
+
+static inline void qemu_spin_lock(QemuSpin *spin)
+{
+ int err;
+
+ err = pthread_spin_lock(&spin->lock);
+ if (err) {
+ qemu_spin_error_exit(err, __func__);
+ }
+}
+
+static inline int qemu_spin_trylock(QemuSpin *spin)
+{
+ return pthread_spin_trylock(&spin->lock);
+}
+
+static inline void qemu_spin_unlock(QemuSpin *spin)
+{
+ int err;
+
+ err = pthread_spin_unlock(&spin->lock);
+ if (err) {
+ qemu_spin_error_exit(err, __func__);
+ }
+}
+
#endif
diff --git a/include/qemu/thread.h b/include/qemu/thread.h
index f5d1259..003daab 100644
--- a/include/qemu/thread.h
+++ b/include/qemu/thread.h
@@ -26,12 +26,6 @@ void qemu_mutex_lock(QemuMutex *mutex);
int qemu_mutex_trylock(QemuMutex *mutex);
void qemu_mutex_unlock(QemuMutex *mutex);
-void qemu_spin_init(QemuSpin *spin);
-void qemu_spin_destroy(QemuSpin *spin);
-void qemu_spin_lock(QemuSpin *spin);
-int qemu_spin_trylock(QemuSpin *spin);
-void qemu_spin_unlock(QemuSpin *spin);
-
void qemu_cond_init(QemuCond *cond);
void qemu_cond_destroy(QemuCond *cond);
diff --git a/util/qemu-thread-posix.c b/util/qemu-thread-posix.c
index 224bacc..04dae0f 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -48,6 +48,11 @@ static void error_exit(int err, const char *msg)
abort();
}
+void qemu_spin_error_exit(int err, const char *msg)
+{
+ error_exit(err, msg);
+}
+
void qemu_mutex_init(QemuMutex *mutex)
{
int err;
@@ -89,51 +94,6 @@ void qemu_mutex_unlock(QemuMutex *mutex)
error_exit(err, __func__);
}
-void qemu_spin_init(QemuSpin *spin)
-{
- int err;
-
- err = pthread_spin_init(&spin->lock, 0);
- if (err) {
- error_exit(err, __func__);
- }
-}
-
-void qemu_spin_destroy(QemuSpin *spin)
-{
- int err;
-
- err = pthread_spin_destroy(&spin->lock);
- if (err) {
- error_exit(err, __func__);
- }
-}
-
-void qemu_spin_lock(QemuSpin *spin)
-{
- int err;
-
- err = pthread_spin_lock(&spin->lock);
- if (err) {
- error_exit(err, __func__);
- }
-}
-
-int qemu_spin_trylock(QemuSpin *spin)
-{
- return pthread_spin_trylock(&spin->lock);
-}
-
-void qemu_spin_unlock(QemuSpin *spin)
-{
- int err;
-
- err = pthread_spin_unlock(&spin->lock);
- if (err) {
- error_exit(err, __func__);
- }
-}
-
void qemu_cond_init(QemuCond *cond)
{
int err;
--
1.9.1