1/* SPDX-License-Identifier: GPL-2.0 */ 2#ifndef PERF_CACHELINE_H 3#define PERF_CACHELINE_H 4 5#include <linux/compiler.h> 6 7int __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 */ 14static 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 25static 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