blob: 5c2e22477abe2f004d5bc4cd5f8913ddfabf89cd [file] [log] [blame]
Nicholas Flintham1e3d3112013-04-10 10:48:38 +01001#ifndef __LINUX_CACHE_H
2#define __LINUX_CACHE_H
3
4#include <linux/kernel.h>
5#include <asm/cache.h>
6
7#ifndef L1_CACHE_ALIGN
8#define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES)
9#endif
10
11#ifndef SMP_CACHE_BYTES
12#define SMP_CACHE_BYTES L1_CACHE_BYTES
13#endif
14
15#ifndef __read_mostly
16#define __read_mostly
17#endif
18
19#ifndef ____cacheline_aligned
20#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
21#endif
22
23#ifndef ____cacheline_aligned_in_smp
24#ifdef CONFIG_SMP
25#define ____cacheline_aligned_in_smp ____cacheline_aligned
26#else
27#define ____cacheline_aligned_in_smp
28#endif
29#endif
30
31#ifndef __cacheline_aligned
32#define __cacheline_aligned \
33 __attribute__((__aligned__(SMP_CACHE_BYTES), \
34 __section__(".data..cacheline_aligned")))
35#endif
36
37#ifndef __cacheline_aligned_in_smp
38#ifdef CONFIG_SMP
39#define __cacheline_aligned_in_smp __cacheline_aligned
40#else
41#define __cacheline_aligned_in_smp
42#endif
43#endif
44
45#ifndef INTERNODE_CACHE_SHIFT
46#define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT
47#endif
48
49#if !defined(____cacheline_internodealigned_in_smp)
50#if defined(CONFIG_SMP)
51#define ____cacheline_internodealigned_in_smp \
52 __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT))))
53#else
54#define ____cacheline_internodealigned_in_smp
55#endif
56#endif
57
58#ifndef CONFIG_ARCH_HAS_CACHE_LINE_SIZE
59#define cache_line_size() L1_CACHE_BYTES
60#endif
61
62#endif