Subversion Repositories Kolibri OS

Rev

Rev 5270 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  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.