]> git.sesse.net Git - bcachefs-tools-debian/blobdiff - include/linux/semaphore.h
Move c_src dirs back to toplevel
[bcachefs-tools-debian] / include / linux / semaphore.h
diff --git a/include/linux/semaphore.h b/include/linux/semaphore.h
new file mode 100644 (file)
index 0000000..498e717
--- /dev/null
@@ -0,0 +1,43 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2008 Intel Corporation
+ * Author: Matthew Wilcox <willy@linux.intel.com>
+ *
+ * Please see kernel/locking/semaphore.c for documentation of these functions
+ */
+#ifndef __LINUX_SEMAPHORE_H
+#define __LINUX_SEMAPHORE_H
+
+#include <linux/list.h>
+#include <linux/spinlock.h>
+
+/* Please don't access any members of this structure directly */
+struct semaphore {
+       raw_spinlock_t          lock;
+       unsigned int            count;
+       struct list_head        wait_list;
+};
+
+#define __SEMAPHORE_INITIALIZER(name, n)                               \
+{                                                                      \
+       .lock           = __RAW_SPIN_LOCK_UNLOCKED((name).lock),        \
+       .count          = n,                                            \
+       .wait_list      = LIST_HEAD_INIT((name).wait_list),             \
+}
+
+#define DEFINE_SEMAPHORE(name) \
+       struct semaphore name = __SEMAPHORE_INITIALIZER(name, 1)
+
+static inline void sema_init(struct semaphore *sem, int val)
+{
+       *sem = (struct semaphore) __SEMAPHORE_INITIALIZER(*sem, val);
+}
+
+extern void down(struct semaphore *sem);
+extern int __must_check down_interruptible(struct semaphore *sem);
+extern int __must_check down_killable(struct semaphore *sem);
+extern int __must_check down_trylock(struct semaphore *sem);
+extern int __must_check down_timeout(struct semaphore *sem, long);
+extern void up(struct semaphore *sem);
+
+#endif /* __LINUX_SEMAPHORE_H */