1951a39d68df598db08dfced8b4707755864a0492Ying Wang/****************************************************************************
2951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
3951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
4951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   This header was automatically generated from a Linux kernel header
5951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   of the same name, to make information necessary for userspace to
6951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   call into the kernel available to libc.  It contains only constants,
7951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   structures, and macros generated from the original header, and thus,
8951a39d68df598db08dfced8b4707755864a0492Ying Wang ***   contains no copyrightable information.
9951a39d68df598db08dfced8b4707755864a0492Ying Wang ***
10951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************
11951a39d68df598db08dfced8b4707755864a0492Ying Wang ****************************************************************************/
12951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef __LINUX_MUTEX_H
13951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __LINUX_MUTEX_H
14951a39d68df598db08dfced8b4707755864a0492Ying Wang
15951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/list.h>
16951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/spinlock_types.h>
17951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/linkage.h>
18951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <linux/lockdep.h>
19951a39d68df598db08dfced8b4707755864a0492Ying Wang
20951a39d68df598db08dfced8b4707755864a0492Ying Wang#include <asm/atomic.h>
21951a39d68df598db08dfced8b4707755864a0492Ying Wang
22951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct mutex {
23951a39d68df598db08dfced8b4707755864a0492Ying Wang
24951a39d68df598db08dfced8b4707755864a0492Ying Wang atomic_t count;
25951a39d68df598db08dfced8b4707755864a0492Ying Wang spinlock_t wait_lock;
26951a39d68df598db08dfced8b4707755864a0492Ying Wang struct list_head wait_list;
27951a39d68df598db08dfced8b4707755864a0492Ying Wang};
28951a39d68df598db08dfced8b4707755864a0492Ying Wang
29951a39d68df598db08dfced8b4707755864a0492Ying Wangstruct mutex_waiter {
30951a39d68df598db08dfced8b4707755864a0492Ying Wang struct list_head list;
31951a39d68df598db08dfced8b4707755864a0492Ying Wang struct task_struct *task;
32951a39d68df598db08dfced8b4707755864a0492Ying Wang};
33951a39d68df598db08dfced8b4707755864a0492Ying Wang
34951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __DEBUG_MUTEX_INITIALIZER(lockname)
35951a39d68df598db08dfced8b4707755864a0492Ying Wang#define mutex_init(mutex)  do {   static struct lock_class_key __key;     __mutex_init((mutex), #mutex, &__key);  } while (0)
36951a39d68df598db08dfced8b4707755864a0492Ying Wang#define mutex_destroy(mutex) do { } while (0)
37951a39d68df598db08dfced8b4707755864a0492Ying Wang
38951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __DEP_MAP_MUTEX_INITIALIZER(lockname)
39951a39d68df598db08dfced8b4707755864a0492Ying Wang
40951a39d68df598db08dfced8b4707755864a0492Ying Wang#define __MUTEX_INITIALIZER(lockname)   { .count = ATOMIC_INIT(1)   , .wait_lock = SPIN_LOCK_UNLOCKED   , .wait_list = LIST_HEAD_INIT(lockname.wait_list)   __DEBUG_MUTEX_INITIALIZER(lockname)   __DEP_MAP_MUTEX_INITIALIZER(lockname) }
41951a39d68df598db08dfced8b4707755864a0492Ying Wang
42951a39d68df598db08dfced8b4707755864a0492Ying Wang#define DEFINE_MUTEX(mutexname)   struct mutex mutexname = __MUTEX_INITIALIZER(mutexname)
43951a39d68df598db08dfced8b4707755864a0492Ying Wang
44951a39d68df598db08dfced8b4707755864a0492Ying Wang#define mutex_lock_nested(lock, subclass) mutex_lock(lock)
45951a39d68df598db08dfced8b4707755864a0492Ying Wang
46951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif
47