Merge tag 'for-linus-20171120' of git://git.infradead.org/linux-mtd
[sfrench/cifs-2.6.git] / include / asm-generic / qrwlock_types.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __ASM_GENERIC_QRWLOCK_TYPES_H
3 #define __ASM_GENERIC_QRWLOCK_TYPES_H
4
5 #include <linux/types.h>
6 #include <asm/spinlock_types.h>
7
8 /*
9  * The queue read/write lock data structure
10  */
11
12 typedef struct qrwlock {
13         union {
14                 atomic_t cnts;
15                 struct {
16 #ifdef __LITTLE_ENDIAN
17                         u8 wlocked;     /* Locked for write? */
18                         u8 __lstate[3];
19 #else
20                         u8 __lstate[3];
21                         u8 wlocked;     /* Locked for write? */
22 #endif
23                 };
24         };
25         arch_spinlock_t         wait_lock;
26 } arch_rwlock_t;
27
28 #define __ARCH_RW_LOCK_UNLOCKED {               \
29         { .cnts = ATOMIC_INIT(0), },            \
30         .wait_lock = __ARCH_SPIN_LOCK_UNLOCKED, \
31 }
32
33 #endif /* __ASM_GENERIC_QRWLOCK_TYPES_H */