cache.h 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #ifndef __LINUX_CACHE_H
  2. #define __LINUX_CACHE_H
  3. #include <linux/kernel.h>
  4. #include <linux/config.h>
  5. #include <asm/cache.h>
  6. #ifndef L1_CACHE_ALIGN
  7. #define L1_CACHE_ALIGN(x) ALIGN(x, L1_CACHE_BYTES)
  8. #endif
  9. #ifndef SMP_CACHE_BYTES
  10. #define SMP_CACHE_BYTES L1_CACHE_BYTES
  11. #endif
  12. #ifndef __read_mostly
  13. #define __read_mostly
  14. #endif
  15. #ifndef ____cacheline_aligned
  16. #define ____cacheline_aligned __attribute__((__aligned__(SMP_CACHE_BYTES)))
  17. #endif
  18. #ifndef ____cacheline_aligned_in_smp
  19. #ifdef CONFIG_SMP
  20. #define ____cacheline_aligned_in_smp ____cacheline_aligned
  21. #else
  22. #define ____cacheline_aligned_in_smp
  23. #endif /* CONFIG_SMP */
  24. #endif
  25. #ifndef __cacheline_aligned
  26. #define __cacheline_aligned \
  27. __attribute__((__aligned__(SMP_CACHE_BYTES), \
  28. __section__(".data.cacheline_aligned")))
  29. #endif /* __cacheline_aligned */
  30. #ifndef __cacheline_aligned_in_smp
  31. #ifdef CONFIG_SMP
  32. #define __cacheline_aligned_in_smp __cacheline_aligned
  33. #else
  34. #define __cacheline_aligned_in_smp
  35. #endif /* CONFIG_SMP */
  36. #endif
  37. /*
  38. * The maximum alignment needed for some critical structures
  39. * These could be inter-node cacheline sizes/L3 cacheline
  40. * size etc. Define this in asm/cache.h for your arch
  41. */
  42. #ifndef INTERNODE_CACHE_SHIFT
  43. #define INTERNODE_CACHE_SHIFT L1_CACHE_SHIFT
  44. #endif
  45. #if !defined(____cacheline_internodealigned_in_smp)
  46. #if defined(CONFIG_SMP)
  47. #define ____cacheline_internodealigned_in_smp \
  48. __attribute__((__aligned__(1 << (INTERNODE_CACHE_SHIFT))))
  49. #else
  50. #define ____cacheline_internodealigned_in_smp
  51. #endif
  52. #endif
  53. #endif /* __LINUX_CACHE_H */