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