summaryrefslogtreecommitdiffstats
path: root/qemu/include/qemu/seqlock.h
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/include/qemu/seqlock.h')
-rw-r--r--qemu/include/qemu/seqlock.h72
1 files changed, 0 insertions, 72 deletions
diff --git a/qemu/include/qemu/seqlock.h b/qemu/include/qemu/seqlock.h
deleted file mode 100644
index 70b01fd60..000000000
--- a/qemu/include/qemu/seqlock.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Seqlock implementation for QEMU
- *
- * Copyright Red Hat, Inc. 2013
- *
- * Author:
- * Paolo Bonzini <pbonzini@redhat.com>
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- *
- */
-#ifndef QEMU_SEQLOCK_H
-#define QEMU_SEQLOCK_H 1
-
-#include <qemu/atomic.h>
-#include <qemu/thread.h>
-
-typedef struct QemuSeqLock QemuSeqLock;
-
-struct QemuSeqLock {
- QemuMutex *mutex;
- unsigned sequence;
-};
-
-static inline void seqlock_init(QemuSeqLock *sl, QemuMutex *mutex)
-{
- sl->mutex = mutex;
- sl->sequence = 0;
-}
-
-/* Lock out other writers and update the count. */
-static inline void seqlock_write_lock(QemuSeqLock *sl)
-{
- if (sl->mutex) {
- qemu_mutex_lock(sl->mutex);
- }
- ++sl->sequence;
-
- /* Write sequence before updating other fields. */
- smp_wmb();
-}
-
-static inline void seqlock_write_unlock(QemuSeqLock *sl)
-{
- /* Write other fields before finalizing sequence. */
- smp_wmb();
-
- ++sl->sequence;
- if (sl->mutex) {
- qemu_mutex_unlock(sl->mutex);
- }
-}
-
-static inline unsigned seqlock_read_begin(QemuSeqLock *sl)
-{
- /* Always fail if a write is in progress. */
- unsigned ret = atomic_read(&sl->sequence);
-
- /* Read sequence before reading other fields. */
- smp_rmb();
- return ret & ~1;
-}
-
-static inline int seqlock_read_retry(const QemuSeqLock *sl, unsigned start)
-{
- /* Read other fields before reading final sequence. */
- smp_rmb();
- return unlikely(atomic_read(&sl->sequence) != start);
-}
-
-#endif