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) || defined(CONFIG_PARISC) 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 /* 49 * The maximum alignment needed for some critical structures 50 * These could be inter-node cacheline sizes/L3 cacheline 51 * size etc. Define this in asm/cache.h for your arch 52 */ 53 #ifndef INTERNODE_CACHE_SHIFT 54 #define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT 55 #endif 56 57 #if !defined(____cacheline_internodealigned_in_smp) 58 #if defined(CONFIG_SMP) 59 #define ____cacheline_internodealigned_in_smp \ 60 __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) 61 #else 62 #define ____cacheline_internodealigned_in_smp 63 #endif 64 #endif 65 66 #endif /* __LINUX_CACHE_H */ 67