source: GPL/include/linux/spinlock.h@ 18

Last change on this file since 18 was 18, checked in by vladest, 20 years ago

initial import

File size: 2.6 KB
Line 
1/* $Id: spinlock.h,v 1.1.1.1 2003/07/02 13:57:00 eleph Exp $ */
2
3#ifndef __LINUX_SPINLOCK_H
4#define __LINUX_SPINLOCK_H
5
6#ifdef __SMP__
7#include <asm/spinlock.h>
8
9#else /* !SMP */
10
11#define DEBUG_SPINLOCKS 0 /* 0 == no debugging, 1 == maintain lock state, 2 == full debug */
12
13/*
14 * Your basic spinlocks, allowing only a single CPU anywhere
15 *
16 * Gcc-2.7.x has a nasty bug with empty initializers.
17 */
18typedef unsigned long spinlock_t;
19
20#define SPIN_LOCK_UNLOCKED 0
21
22void spin_lock_init(spinlock_t *lock);
23void spin_lock(spinlock_t *lock);
24void spin_lock_flag(spinlock_t *lock, unsigned long *flag);
25int spin_trylock(spinlock_t *lock);
26void spin_unlock_wait(spinlock_t *lock);
27void spin_unlock(spinlock_t *lock);
28
29/*
30 * Read-write spinlocks, allowing multiple readers
31 * but only one writer.
32 *
33 * NOTE! it is quite common to have readers in interrupts
34 * but no interrupt writers. For those circumstances we
35 * can "mix" irq-safe locks - any writer needs to get a
36 * irq-safe write-lock, but readers can get non-irqsafe
37 * read-locks.
38 *
39 * Gcc-2.7.x has a nasty bug with empty initializers.
40 */
41// typedef struct { int gcc_is_buggy; } rwlock_t;
42 typedef unsigned long rwlock_t;
43 #define RW_LOCK_UNLOCKED 0
44
45
46/*
47 * These are the generic versions of the spinlocks and read-write
48 * locks..
49 */
50
51#define spin_lock_irqsave(lock, flags) spin_lock_flag(lock, (unsigned long *)&flags)
52#define spin_lock_irq(lock) spin_lock(lock)
53#define spin_lock_bh(lock) spin_lock(lock)
54
55#define read_lock_irqsave(lock, flags) spin_lock_flag(lock, (unsigned long *)&flags)
56#define read_lock_irq(lock) spin_lock(lock)
57#define read_lock_bh(lock) spin_lock(lock)
58
59#define write_lock_irqsave(lock, flags) spin_lock_flag(lock, (unsigned long *)&flags)
60#define write_lock_irq(lock) spin_lock(lock)
61#define write_lock_bh(lock) spin_lock(lock)
62
63#define spin_unlock_irqrestore(lock, flags) spin_unlock(lock)
64#define spin_unlock_irq(lock) spin_unlock(lock)
65#define spin_unlock_bh(lock) spin_unlock(lock)
66
67#define read_unlock_irqrestore(lock, flags) spin_unlock(lock)
68#define read_unlock_irq(lock) spin_unlock(lock)
69#define read_unlock_bh(lock) spin_unlock(lock)
70
71#define write_unlock_irqrestore(lock, flags) spin_unlock(lock)
72#define write_unlock_irq(lock) spin_unlock(lock)
73#define write_unlock_bh(lock) spin_unlock(lock)
74
75#define read_lock(lock) spin_lock(lock)
76#define read_unlock(lock) spin_unlock(lock)
77#define write_lock(lock) spin_lock(lock)
78#define write_unlock(lock) spin_unlock(lock)
79
80#endif /* !SMP */
81#endif /* __LINUX_SPINLOCK_H */
Note: See TracBrowser for help on using the repository browser.