On some parallel workloads this gives up to a 15% speed improvement. Signed-off-by: Emilio G. Cota <c...@braap.org> --- 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