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