qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [RFC PATCH V6 04/18] add support for spin lock on POSIX sys


From: fred . konrad
Subject: [Qemu-devel] [RFC PATCH V6 04/18] add support for spin lock on POSIX systems exclusively
Date: Fri, 26 Jun 2015 16:47:19 +0200

From: Guillaume Delbergue <address@hidden>

WARNING: spin lock is currently not implemented on WIN32

Signed-off-by: Guillaume Delbergue <address@hidden>
---
 include/qemu/thread-posix.h |  4 ++++
 include/qemu/thread-win32.h |  4 ++++
 include/qemu/thread.h       |  7 +++++++
 util/qemu-thread-posix.c    | 45 +++++++++++++++++++++++++++++++++++++++++++++
 util/qemu-thread-win32.c    | 30 ++++++++++++++++++++++++++++++
 5 files changed, 90 insertions(+)

diff --git a/include/qemu/thread-posix.h b/include/qemu/thread-posix.h
index eb5c7a1..8ce8f01 100644
--- a/include/qemu/thread-posix.h
+++ b/include/qemu/thread-posix.h
@@ -7,6 +7,10 @@ struct QemuMutex {
     pthread_mutex_t lock;
 };
 
+struct QemuSpin {
+    pthread_spinlock_t lock;
+};
+
 struct QemuCond {
     pthread_cond_t cond;
 };
diff --git a/include/qemu/thread-win32.h b/include/qemu/thread-win32.h
index 3d58081..310c8bd 100644
--- a/include/qemu/thread-win32.h
+++ b/include/qemu/thread-win32.h
@@ -7,6 +7,10 @@ struct QemuMutex {
     LONG owner;
 };
 
+struct QemuSpin {
+    PKSPIN_LOCK lock;
+};
+
 struct QemuCond {
     LONG waiters, target;
     HANDLE sema;
diff --git a/include/qemu/thread.h b/include/qemu/thread.h
index 5114ec8..f5d1259 100644
--- a/include/qemu/thread.h
+++ b/include/qemu/thread.h
@@ -5,6 +5,7 @@
 #include <stdbool.h>
 
 typedef struct QemuMutex QemuMutex;
+typedef struct QemuSpin QemuSpin;
 typedef struct QemuCond QemuCond;
 typedef struct QemuSemaphore QemuSemaphore;
 typedef struct QemuEvent QemuEvent;
@@ -25,6 +26,12 @@ 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 ba67cec..224bacc 100644
--- a/util/qemu-thread-posix.c
+++ b/util/qemu-thread-posix.c
@@ -89,6 +89,51 @@ 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;
diff --git a/util/qemu-thread-win32.c b/util/qemu-thread-win32.c
index 406b52f..6fbe6a8 100644
--- a/util/qemu-thread-win32.c
+++ b/util/qemu-thread-win32.c
@@ -80,6 +80,36 @@ void qemu_mutex_unlock(QemuMutex *mutex)
     LeaveCriticalSection(&mutex->lock);
 }
 
+void qemu_spin_init(QemuSpin *spin)
+{
+    printf("spinlock not implemented");
+    abort();
+}
+
+void qemu_spin_destroy(QemuSpin *spin)
+{
+    printf("spinlock not implemented");
+    abort();
+}
+
+void qemu_spin_lock(QemuSpin *spin)
+{
+    printf("spinlock not implemented");
+    abort();
+}
+
+int qemu_spin_trylock(QemuSpin *spin)
+{
+    printf("spinlock not implemented");
+    abort();
+}
+
+void qemu_spin_unlock(QemuSpin *spin)
+{
+    printf("spinlock not implemented");
+    abort();
+}
+
 void qemu_cond_init(QemuCond *cond)
 {
     memset(cond, 0, sizeof(*cond));
-- 
1.9.0




reply via email to

[Prev in Thread] Current Thread [Next in Thread]