#ifndef __LINUX_MUTEX_H
#define __LINUX_MUTEX_H
#include <asm/current.h>
#include <linux/list.h>
#include <linux/spinlock_types.h>
#include <linux/lockdep.h>
#include <linux/atomic.h>
#include <asm/processor.h>
#include <linux/osq_lock.h>
#include <linux/debug_locks.h>
#include <linux/cleanup.h>
#include <linux/mutex_types.h>
struct device;
#ifdef CONFIG_DEBUG_LOCK_ALLOC
#define __DEP_MAP_MUTEX_INITIALIZER(lockname) …
#else
#define __DEP_MAP_MUTEX_INITIALIZER …
#endif
#ifdef CONFIG_DEBUG_MUTEXES
#define __DEBUG_MUTEX_INITIALIZER(lockname) …
extern void mutex_destroy(struct mutex *lock);
#else
#define __DEBUG_MUTEX_INITIALIZER …
static inline void mutex_destroy(struct mutex *lock) {}
#endif
#ifndef CONFIG_PREEMPT_RT
#define mutex_init(mutex) …
#define __MUTEX_INITIALIZER(lockname) …
#define DEFINE_MUTEX(mutexname) …
extern void __mutex_init(struct mutex *lock, const char *name,
struct lock_class_key *key);
extern bool mutex_is_locked(struct mutex *lock);
#else
#define __MUTEX_INITIALIZER …
#define DEFINE_MUTEX …
extern void __mutex_rt_init(struct mutex *lock, const char *name,
struct lock_class_key *key);
#define mutex_is_locked …
#define __mutex_init …
#define mutex_init …
#endif
#ifdef CONFIG_DEBUG_MUTEXES
int __devm_mutex_init(struct device *dev, struct mutex *lock);
#else
static inline int __devm_mutex_init(struct device *dev, struct mutex *lock)
{
return 0;
}
#endif
#define devm_mutex_init(dev, mutex) …
#ifdef CONFIG_DEBUG_LOCK_ALLOC
extern void mutex_lock_nested(struct mutex *lock, unsigned int subclass);
extern void _mutex_lock_nest_lock(struct mutex *lock, struct lockdep_map *nest_lock);
extern int __must_check mutex_lock_interruptible_nested(struct mutex *lock,
unsigned int subclass);
extern int __must_check mutex_lock_killable_nested(struct mutex *lock,
unsigned int subclass);
extern void mutex_lock_io_nested(struct mutex *lock, unsigned int subclass);
#define mutex_lock(lock) …
#define mutex_lock_interruptible(lock) …
#define mutex_lock_killable(lock) …
#define mutex_lock_io(lock) …
#define mutex_lock_nest_lock(lock, nest_lock) …
#else
extern void mutex_lock(struct mutex *lock);
extern int __must_check mutex_lock_interruptible(struct mutex *lock);
extern int __must_check mutex_lock_killable(struct mutex *lock);
extern void mutex_lock_io(struct mutex *lock);
#define mutex_lock_nested …
#define mutex_lock_interruptible_nested …
#define mutex_lock_killable_nested …
#define mutex_lock_nest_lock …
#define mutex_lock_io_nested …
#endif
extern int mutex_trylock(struct mutex *lock);
extern void mutex_unlock(struct mutex *lock);
extern int atomic_dec_and_mutex_lock(atomic_t *cnt, struct mutex *lock);
DEFINE_GUARD(mutex, struct mutex *, mutex_lock(_T), mutex_unlock(_T))
DEFINE_GUARD_COND(mutex, _try, mutex_trylock(_T))
DEFINE_GUARD_COND(mutex, _intr, mutex_lock_interruptible(_T) == 0)
#endif