linux/include/linux/cache.h
<<
>>
Prefs
   1#ifndef __LINUX_CACHE_H
   2#define __LINUX_CACHE_H
   3
   4#include <uapi/linux/kernel.h>
   5#include <asm/cache.h>
   6
   7#ifndef L1_CACHE_ALIGN
   8#define L1_CACHE_ALIGN(x) __ALIGN_KERNEL(x, L1_CACHE_BYTES)
   9#endif
  10
  11#ifndef SMP_CACHE_BYTES
  12#define SMP_CACHE_BYTES L1_CACHE_BYTES
  13#endif
  14
  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 */
  20#ifndef __read_mostly
  21#define __read_mostly
  22#endif
  23
  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
  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),                  \
  48                 __section__(".data..cacheline_aligned")))
  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
  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)
  69#if defined(CONFIG_SMP)
  70#define ____cacheline_internodealigned_in_smp \
  71        __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT))))
  72#else
  73#define ____cacheline_internodealigned_in_smp
  74#endif
  75#endif
  76
  77#ifndef CONFIG_ARCH_HAS_CACHE_LINE_SIZE
  78#define cache_line_size()       L1_CACHE_BYTES
  79#endif
  80
  81#endif /* __LINUX_CACHE_H */
  82