1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef PERF_CACHELINE_H 3 #define PERF_CACHELINE_H 4 5 #include <linux/compiler.h> 6 7 int __pure cacheline_size(void); 8 9 10 /* 11 * Some architectures have 'Adjacent Cacheline Prefetch' feature, 12 * which performs like the cacheline size being doubled. 13 */ 14 static inline u64 cl_address(u64 address, bool double_cl) 15 { 16 u64 size = cacheline_size(); 17 18 if (double_cl) 19 size *= 2; 20 21 /* return the cacheline of the address */ 22 return (address & ~(size - 1)); 23 } 24 25 static inline u64 cl_offset(u64 address, bool double_cl) 26 { 27 u64 size = cacheline_size(); 28 29 if (double_cl) 30 size *= 2; 31 32 /* return the offset inside cacheline */ 33 return (address & (size - 1)); 34 } 35 36 #endif // PERF_CACHELINE_H 37