]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blame - include/linux/cache.h
seccomp: Move speculation migitation control to arch code
[mirror_ubuntu-artful-kernel.git] / include / linux / cache.h
CommitLineData
1da177e4
LT
1#ifndef __LINUX_CACHE_H
2#define __LINUX_CACHE_H
3
c28aa1f0 4#include <uapi/linux/kernel.h>
1da177e4
LT
5#include <asm/cache.h>
6
7#ifndef L1_CACHE_ALIGN
c28aa1f0 8#define L1_CACHE_ALIGN(x) __ALIGN_KERNEL(x, L1_CACHE_BYTES)
1da177e4
LT
9#endif
10
11#ifndef SMP_CACHE_BYTES
12#define SMP_CACHE_BYTES L1_CACHE_BYTES
13#endif
14
c74ba8b3
KC
15/*
16 * __read_mostly is used to keep rarely changing variables out of frequently
17 * updated cachelines. If an architecture doesn't support it, ignore the
18 * hint.
19 */
804f1594 20#ifndef __read_mostly
6c036527
CL
21#define __read_mostly
22#endif
23
c74ba8b3
KC
24/*
25 * __ro_after_init is used to mark things that are read-only after init (i.e.
26 * after mark_rodata_ro() has been called). These are effectively read-only,
27 * but may get written to during init, so can't live in .rodata (via "const").
28 */
29#ifndef __ro_after_init
30#define __ro_after_init __attribute__((__section__(".data..ro_after_init")))
31#endif
32
1da177e4
LT
33#ifndef ____cacheline_aligned
34#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
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 /* CONFIG_SMP */
43#endif
44
45#ifndef __cacheline_aligned
46#define __cacheline_aligned \
47 __attribute__((__aligned__(SMP_CACHE_BYTES), \
4af57b78 48 __section__(".data..cacheline_aligned")))
1da177e4
LT
49#endif /* __cacheline_aligned */
50
51#ifndef __cacheline_aligned_in_smp
52#ifdef CONFIG_SMP
53#define __cacheline_aligned_in_smp __cacheline_aligned
54#else
55#define __cacheline_aligned_in_smp
56#endif /* CONFIG_SMP */
57#endif
58
22fc6ecc
RT
59/*
60 * The maximum alignment needed for some critical structures
61 * These could be inter-node cacheline sizes/L3 cacheline
62 * size etc. Define this in asm/cache.h for your arch
63 */
64#ifndef INTERNODE_CACHE_SHIFT
65#define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT
66#endif
67
68#if !defined(____cacheline_internodealigned_in_smp)
1da177e4 69#if defined(CONFIG_SMP)
22fc6ecc
RT
70#define ____cacheline_internodealigned_in_smp \
71 __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT))))
1da177e4 72#else
22fc6ecc 73#define ____cacheline_internodealigned_in_smp
1da177e4
LT
74#endif
75#endif
76
1b27d05b
PE
77#ifndef CONFIG_ARCH_HAS_CACHE_LINE_SIZE
78#define cache_line_size() L1_CACHE_BYTES
79#endif
80
1da177e4 81#endif /* __LINUX_CACHE_H */