11da177e4SLinus Torvalds #ifndef __LINUX_CACHE_H 21da177e4SLinus Torvalds #define __LINUX_CACHE_H 31da177e4SLinus Torvalds 41da177e4SLinus Torvalds #include <linux/kernel.h> 51da177e4SLinus Torvalds #include <asm/cache.h> 61da177e4SLinus Torvalds 71da177e4SLinus Torvalds #ifndef L1_CACHE_ALIGN 81da177e4SLinus Torvalds #define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES) 91da177e4SLinus Torvalds #endif 101da177e4SLinus Torvalds 111da177e4SLinus Torvalds #ifndef SMP_CACHE_BYTES 121da177e4SLinus Torvalds #define SMP_CACHE_BYTES L1_CACHE_BYTES 131da177e4SLinus Torvalds #endif 141da177e4SLinus Torvalds 15804f1594SKyle McMartin #ifndef __read_mostly 166c036527SChristoph Lameter #define __read_mostly 176c036527SChristoph Lameter #endif 186c036527SChristoph Lameter 191da177e4SLinus Torvalds #ifndef ____cacheline_aligned 201da177e4SLinus Torvalds #define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES))) 211da177e4SLinus Torvalds #endif 221da177e4SLinus Torvalds 231da177e4SLinus Torvalds #ifndef ____cacheline_aligned_in_smp 241da177e4SLinus Torvalds #ifdef CONFIG_SMP 251da177e4SLinus Torvalds #define ____cacheline_aligned_in_smp ____cacheline_aligned 261da177e4SLinus Torvalds #else 271da177e4SLinus Torvalds #define ____cacheline_aligned_in_smp 281da177e4SLinus Torvalds #endif /* CONFIG_SMP */ 291da177e4SLinus Torvalds #endif 301da177e4SLinus Torvalds 311da177e4SLinus Torvalds #ifndef __cacheline_aligned 321da177e4SLinus Torvalds #define __cacheline_aligned \ 331da177e4SLinus Torvalds __attribute__((__aligned__(SMP_CACHE_BYTES), \ 34*4af57b78STim Abbott __section__(".data..cacheline_aligned"))) 351da177e4SLinus Torvalds #endif /* __cacheline_aligned */ 361da177e4SLinus Torvalds 371da177e4SLinus Torvalds #ifndef __cacheline_aligned_in_smp 381da177e4SLinus Torvalds #ifdef CONFIG_SMP 391da177e4SLinus Torvalds #define __cacheline_aligned_in_smp __cacheline_aligned 401da177e4SLinus Torvalds #else 411da177e4SLinus Torvalds #define __cacheline_aligned_in_smp 421da177e4SLinus Torvalds #endif /* CONFIG_SMP */ 431da177e4SLinus Torvalds #endif 441da177e4SLinus Torvalds 4522fc6eccSRavikiran G Thirumalai /* 4622fc6eccSRavikiran G Thirumalai * The maximum alignment needed for some critical structures 4722fc6eccSRavikiran G Thirumalai * These could be inter-node cacheline sizes/L3 cacheline 4822fc6eccSRavikiran G Thirumalai * size etc. Define this in asm/cache.h for your arch 4922fc6eccSRavikiran G Thirumalai */ 5022fc6eccSRavikiran G Thirumalai #ifndef INTERNODE_CACHE_SHIFT 5122fc6eccSRavikiran G Thirumalai #define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT 5222fc6eccSRavikiran G Thirumalai #endif 5322fc6eccSRavikiran G Thirumalai 5422fc6eccSRavikiran G Thirumalai #if !defined(____cacheline_internodealigned_in_smp) 551da177e4SLinus Torvalds #if defined(CONFIG_SMP) 5622fc6eccSRavikiran G Thirumalai #define ____cacheline_internodealigned_in_smp \ 5722fc6eccSRavikiran G Thirumalai __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT)))) 581da177e4SLinus Torvalds #else 5922fc6eccSRavikiran G Thirumalai #define ____cacheline_internodealigned_in_smp 601da177e4SLinus Torvalds #endif 611da177e4SLinus Torvalds #endif 621da177e4SLinus Torvalds 631b27d05bSPekka Enberg #ifndef CONFIG_ARCH_HAS_CACHE_LINE_SIZE 641b27d05bSPekka Enberg #define cache_line_size() L1_CACHE_BYTES 651b27d05bSPekka Enberg #endif 661b27d05bSPekka Enberg 671da177e4SLinus Torvalds #endif /* __LINUX_CACHE_H */ 68