xref: /linux/include/linux/cache.h (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1*1da177e4SLinus Torvalds #ifndef __LINUX_CACHE_H
2*1da177e4SLinus Torvalds #define __LINUX_CACHE_H
3*1da177e4SLinus Torvalds 
4*1da177e4SLinus Torvalds #include <linux/kernel.h>
5*1da177e4SLinus Torvalds #include <linux/config.h>
6*1da177e4SLinus Torvalds #include <asm/cache.h>
7*1da177e4SLinus Torvalds 
8*1da177e4SLinus Torvalds #ifndef L1_CACHE_ALIGN
9*1da177e4SLinus Torvalds #define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES)
10*1da177e4SLinus Torvalds #endif
11*1da177e4SLinus Torvalds 
12*1da177e4SLinus Torvalds #ifndef SMP_CACHE_BYTES
13*1da177e4SLinus Torvalds #define SMP_CACHE_BYTES L1_CACHE_BYTES
14*1da177e4SLinus Torvalds #endif
15*1da177e4SLinus Torvalds 
16*1da177e4SLinus Torvalds #ifndef ____cacheline_aligned
17*1da177e4SLinus Torvalds #define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
18*1da177e4SLinus Torvalds #endif
19*1da177e4SLinus Torvalds 
20*1da177e4SLinus Torvalds #ifndef ____cacheline_aligned_in_smp
21*1da177e4SLinus Torvalds #ifdef CONFIG_SMP
22*1da177e4SLinus Torvalds #define ____cacheline_aligned_in_smp ____cacheline_aligned
23*1da177e4SLinus Torvalds #else
24*1da177e4SLinus Torvalds #define ____cacheline_aligned_in_smp
25*1da177e4SLinus Torvalds #endif /* CONFIG_SMP */
26*1da177e4SLinus Torvalds #endif
27*1da177e4SLinus Torvalds 
28*1da177e4SLinus Torvalds #ifndef __cacheline_aligned
29*1da177e4SLinus Torvalds #define __cacheline_aligned					\
30*1da177e4SLinus Torvalds   __attribute__((__aligned__(SMP_CACHE_BYTES),			\
31*1da177e4SLinus Torvalds 		 __section__(".data.cacheline_aligned")))
32*1da177e4SLinus Torvalds #endif /* __cacheline_aligned */
33*1da177e4SLinus Torvalds 
34*1da177e4SLinus Torvalds #ifndef __cacheline_aligned_in_smp
35*1da177e4SLinus Torvalds #ifdef CONFIG_SMP
36*1da177e4SLinus Torvalds #define __cacheline_aligned_in_smp __cacheline_aligned
37*1da177e4SLinus Torvalds #else
38*1da177e4SLinus Torvalds #define __cacheline_aligned_in_smp
39*1da177e4SLinus Torvalds #endif /* CONFIG_SMP */
40*1da177e4SLinus Torvalds #endif
41*1da177e4SLinus Torvalds 
42*1da177e4SLinus Torvalds #if !defined(____cacheline_maxaligned_in_smp)
43*1da177e4SLinus Torvalds #if defined(CONFIG_SMP)
44*1da177e4SLinus Torvalds #define ____cacheline_maxaligned_in_smp \
45*1da177e4SLinus Torvalds 	__attribute__((__aligned__(1 << (L1_CACHE_SHIFT_MAX))))
46*1da177e4SLinus Torvalds #else
47*1da177e4SLinus Torvalds #define ____cacheline_maxaligned_in_smp
48*1da177e4SLinus Torvalds #endif
49*1da177e4SLinus Torvalds #endif
50*1da177e4SLinus Torvalds 
51*1da177e4SLinus Torvalds #endif /* __LINUX_CACHE_H */
52