xref: /linux/include/linux/cache.h (revision 6c036527a630720063b67d9a65455e8caca2c8fa)
11da177e4SLinus Torvalds #ifndef __LINUX_CACHE_H
21da177e4SLinus Torvalds #define __LINUX_CACHE_H
31da177e4SLinus Torvalds 
41da177e4SLinus Torvalds #include <linux/kernel.h>
51da177e4SLinus Torvalds #include <linux/config.h>
61da177e4SLinus Torvalds #include <asm/cache.h>
71da177e4SLinus Torvalds 
81da177e4SLinus Torvalds #ifndef L1_CACHE_ALIGN
91da177e4SLinus Torvalds #define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES)
101da177e4SLinus Torvalds #endif
111da177e4SLinus Torvalds 
121da177e4SLinus Torvalds #ifndef SMP_CACHE_BYTES
131da177e4SLinus Torvalds #define SMP_CACHE_BYTES L1_CACHE_BYTES
141da177e4SLinus Torvalds #endif
151da177e4SLinus Torvalds 
16*6c036527SChristoph Lameter #ifdef CONFIG_X86
17*6c036527SChristoph Lameter #define __read_mostly __attribute__((__section__(".data.read_mostly")))
18*6c036527SChristoph Lameter #else
19*6c036527SChristoph Lameter #define __read_mostly
20*6c036527SChristoph Lameter #endif
21*6c036527SChristoph Lameter 
221da177e4SLinus Torvalds #ifndef ____cacheline_aligned
231da177e4SLinus Torvalds #define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
241da177e4SLinus Torvalds #endif
251da177e4SLinus Torvalds 
261da177e4SLinus Torvalds #ifndef ____cacheline_aligned_in_smp
271da177e4SLinus Torvalds #ifdef CONFIG_SMP
281da177e4SLinus Torvalds #define ____cacheline_aligned_in_smp ____cacheline_aligned
291da177e4SLinus Torvalds #else
301da177e4SLinus Torvalds #define ____cacheline_aligned_in_smp
311da177e4SLinus Torvalds #endif /* CONFIG_SMP */
321da177e4SLinus Torvalds #endif
331da177e4SLinus Torvalds 
341da177e4SLinus Torvalds #ifndef __cacheline_aligned
351da177e4SLinus Torvalds #define __cacheline_aligned					\
361da177e4SLinus Torvalds   __attribute__((__aligned__(SMP_CACHE_BYTES),			\
371da177e4SLinus Torvalds 		 __section__(".data.cacheline_aligned")))
381da177e4SLinus Torvalds #endif /* __cacheline_aligned */
391da177e4SLinus Torvalds 
401da177e4SLinus Torvalds #ifndef __cacheline_aligned_in_smp
411da177e4SLinus Torvalds #ifdef CONFIG_SMP
421da177e4SLinus Torvalds #define __cacheline_aligned_in_smp __cacheline_aligned
431da177e4SLinus Torvalds #else
441da177e4SLinus Torvalds #define __cacheline_aligned_in_smp
451da177e4SLinus Torvalds #endif /* CONFIG_SMP */
461da177e4SLinus Torvalds #endif
471da177e4SLinus Torvalds 
481da177e4SLinus Torvalds #if !defined(____cacheline_maxaligned_in_smp)
491da177e4SLinus Torvalds #if defined(CONFIG_SMP)
501da177e4SLinus Torvalds #define ____cacheline_maxaligned_in_smp \
511da177e4SLinus Torvalds 	__attribute__((__aligned__(1 << (L1_CACHE_SHIFT_MAX))))
521da177e4SLinus Torvalds #else
531da177e4SLinus Torvalds #define ____cacheline_maxaligned_in_smp
541da177e4SLinus Torvalds #endif
551da177e4SLinus Torvalds #endif
561da177e4SLinus Torvalds 
571da177e4SLinus Torvalds #endif /* __LINUX_CACHE_H */
58