blob: 7cfee2d9efee7d0a226db4887e3149a5c6ad6581 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
#ifndef __SPINLOCK_H__
#define __SPINLOCK_H__
#include "kernel/kernel.h"
typedef struct spinlock {
atomic_t val;
} spinlock_t;
#ifndef CONFIG_SMP
#define SPINLOCK_DEFINE(name)
#define PRIVATE_SPINLOCK_DEFINE(name)
#define SPINLOCK_DECLARE(name)
#define spinlock_init(sl)
#define spinlock_lock(sl)
#define spinlock_unlock(sl)
#else
/* SMP */
#define SPINLOCK_DEFINE(name) spinlock_t name;
#define PRIVATE_SPINLOCK_DEFINE(name) PRIVATE SPINLOCK_DEFINE(name)
#define SPINLOCK_DECLARE(name) extern SPINLOCK_DEFINE(name)
#define spinlock_init(sl) do { (sl)->val = 0; } while (0)
#if CONFIG_MAX_CPUS == 1
#define spinlock_lock(sl)
#define spinlock_unlock(sl)
#else
void arch_spinlock_lock(atomic_t * sl);
void arch_spinlock_unlock(atomic_t * sl);
#define spinlock_lock(sl) arch_spinlock_lock((atomic_t*) sl)
#define spinlock_unlock(sl) arch_spinlock_unlock((atomic_t*) sl)
#endif
#endif /* CONFIG_SMP */
#define BKL_LOCK() spinlock_lock(&big_kernel_lock)
#define BKL_UNLOCK() spinlock_unlock(&big_kernel_lock)
#endif /* __SPINLOCK_H__ */
|