cache.h 1.6 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3
#ifndef __LINUX_CACHE_H
#define __LINUX_CACHE_H

4
#include <uapi/linux/kernel.h>
L
Linus Torvalds 已提交
5 6 7
#include <asm/cache.h>

#ifndef L1_CACHE_ALIGN
8
#define L1_CACHE_ALIGN(x) __ALIGN_KERNEL(x, L1_CACHE_BYTES)
L
Linus Torvalds 已提交
9 10 11 12 13 14
#endif

#ifndef SMP_CACHE_BYTES
#define SMP_CACHE_BYTES L1_CACHE_BYTES
#endif

15
#ifndef __read_mostly
16 17 18
#define __read_mostly
#endif

L
Linus Torvalds 已提交
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
#ifndef ____cacheline_aligned
#define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
#endif

#ifndef ____cacheline_aligned_in_smp
#ifdef CONFIG_SMP
#define ____cacheline_aligned_in_smp ____cacheline_aligned
#else
#define ____cacheline_aligned_in_smp
#endif /* CONFIG_SMP */
#endif

#ifndef __cacheline_aligned
#define __cacheline_aligned					\
  __attribute__((__aligned__(SMP_CACHE_BYTES),			\
34
		 __section__(".data..cacheline_aligned")))
L
Linus Torvalds 已提交
35 36 37 38 39 40 41 42 43 44
#endif /* __cacheline_aligned */

#ifndef __cacheline_aligned_in_smp
#ifdef CONFIG_SMP
#define __cacheline_aligned_in_smp __cacheline_aligned
#else
#define __cacheline_aligned_in_smp
#endif /* CONFIG_SMP */
#endif

45 46 47 48 49 50 51 52 53 54
/*
 * The maximum alignment needed for some critical structures
 * These could be inter-node cacheline sizes/L3 cacheline
 * size etc.  Define this in asm/cache.h for your arch
 */
#ifndef INTERNODE_CACHE_SHIFT
#define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT
#endif

#if !defined(____cacheline_internodealigned_in_smp)
L
Linus Torvalds 已提交
55
#if defined(CONFIG_SMP)
56 57
#define ____cacheline_internodealigned_in_smp \
	__attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT))))
L
Linus Torvalds 已提交
58
#else
59
#define ____cacheline_internodealigned_in_smp
L
Linus Torvalds 已提交
60 61 62
#endif
#endif

63 64 65 66
#ifndef CONFIG_ARCH_HAS_CACHE_LINE_SIZE
#define cache_line_size()	L1_CACHE_BYTES
#endif

L
Linus Torvalds 已提交
67
#endif /* __LINUX_CACHE_H */