|
1 #ifndef __LINUX_CACHE_H |
|
2 #define __LINUX_CACHE_H |
|
3 |
|
4 #include <linux/kernel.h> |
|
5 #include <asm/cache.h> |
|
6 |
|
7 #ifndef L1_CACHE_ALIGN |
|
8 #define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES) |
|
9 #endif |
|
10 |
|
11 #ifndef SMP_CACHE_BYTES |
|
12 #define SMP_CACHE_BYTES L1_CACHE_BYTES |
|
13 #endif |
|
14 |
|
15 #ifndef __read_mostly |
|
16 #define __read_mostly |
|
17 #endif |
|
18 |
|
19 #ifndef ____cacheline_aligned |
|
20 #define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES))) |
|
21 #endif |
|
22 |
|
23 #ifndef ____cacheline_aligned_in_smp |
|
24 #ifdef CONFIG_SMP |
|
25 #define ____cacheline_aligned_in_smp ____cacheline_aligned |
|
26 #else |
|
27 #define ____cacheline_aligned_in_smp |
|
28 #endif /* CONFIG_SMP */ |
|
29 #endif |
|
30 |
|
31 #ifndef __cacheline_aligned |
|
32 #define __cacheline_aligned \ |
|
33 __attribute__((__aligned__(SMP_CACHE_BYTES), \ |
|
34 __section__(".data.cacheline_aligned"))) |
|
35 #endif /* __cacheline_aligned */ |
|
36 |
|
37 #ifndef __cacheline_aligned_in_smp |
|
38 #ifdef CONFIG_SMP |
|
39 #define __cacheline_aligned_in_smp __cacheline_aligned |
|
40 #else |
|
41 #define __cacheline_aligned_in_smp |
|
42 #endif /* CONFIG_SMP */ |
|
43 #endif |
|
44 |
|
45 /* |
|
46 * The maximum alignment needed for some critical structures |
|
47 * These could be inter-node cacheline sizes/L3 cacheline |
|
48 * size etc. Define this in asm/cache.h for your arch |
|
49 */ |
|
50 #ifndef INTERNODE_CACHE_SHIFT |
|
51 #define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT |
|
52 #endif |
|
53 |
|
54 #if !defined(____cacheline_internodealigned_in_smp) |
|
55 #if defined(CONFIG_SMP) |
|
56 #define ____cacheline_internodealigned_in_smp \ |
|
57 __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) |
|
58 #else |
|
59 #define ____cacheline_internodealigned_in_smp |
|
60 #endif |
|
61 #endif |
|
62 |
|
63 #ifndef CONFIG_ARCH_HAS_CACHE_LINE_SIZE |
|
64 #define cache_line_size() L1_CACHE_BYTES |
|
65 #endif |
|
66 |
|
67 #endif /* __LINUX_CACHE_H */ |