blob: 8ebd5df7451e28b88a8a155bf3ff7dcb081ddb35 [file] [log] [blame]
H. Peter Anvin1965aae2008-10-22 22:26:29 -07001#ifndef _ASM_X86_SPINLOCK_TYPES_H
2#define _ASM_X86_SPINLOCK_TYPES_H
Ingo Molnarfb1c8f92005-09-10 00:25:56 -07003
4#ifndef __LINUX_SPINLOCK_TYPES_H
5# error "please don't include this file directly"
6#endif
7
Jeremy Fitzhardinge84eb9502010-07-02 23:26:36 +01008#include <linux/types.h>
9
10#if (CONFIG_NR_CPUS < 256)
11typedef u8 __ticket_t;
Jeremy Fitzhardinge229855d2010-07-13 15:14:26 -070012typedef u16 __ticketpair_t;
Jeremy Fitzhardinge84eb9502010-07-02 23:26:36 +010013#else
14typedef u16 __ticket_t;
Jeremy Fitzhardinge229855d2010-07-13 15:14:26 -070015typedef u32 __ticketpair_t;
Jeremy Fitzhardinge84eb9502010-07-02 23:26:36 +010016#endif
17
18#define TICKET_SHIFT (sizeof(__ticket_t) * 8)
19#define TICKET_MASK ((__ticket_t)((1 << TICKET_SHIFT) - 1))
20
Thomas Gleixner445c8952009-12-02 19:49:50 +010021typedef struct arch_spinlock {
Jeremy Fitzhardinge84eb9502010-07-02 23:26:36 +010022 union {
Jeremy Fitzhardinge229855d2010-07-13 15:14:26 -070023 __ticketpair_t head_tail;
Jeremy Fitzhardinge84eb9502010-07-02 23:26:36 +010024 struct __raw_tickets {
25 __ticket_t head, tail;
26 } tickets;
27 };
Thomas Gleixner445c8952009-12-02 19:49:50 +010028} arch_spinlock_t;
Ingo Molnarfb1c8f92005-09-10 00:25:56 -070029
Jeremy Fitzhardinge229855d2010-07-13 15:14:26 -070030#define __ARCH_SPIN_LOCK_UNLOCKED { { 0 } }
Ingo Molnarfb1c8f92005-09-10 00:25:56 -070031
Jan Beulicha7500362011-07-19 13:00:45 +010032#include <asm/rwlock.h>
Ingo Molnarfb1c8f92005-09-10 00:25:56 -070033
H. Peter Anvin1965aae2008-10-22 22:26:29 -070034#endif /* _ASM_X86_SPINLOCK_TYPES_H */