/* SPDX-License-Identifier: GPL-2.0 */ #ifndef PERF_CACHELINE_H #define PERF_CACHELINE_H #include <linux/compiler.h> int __pure cacheline_size(void); /* * Some architectures have 'Adjacent Cacheline Prefetch' feature, * which performs like the cacheline size being doubled. */ static inline u64 cl_address(u64 address, bool double_cl) { u64 size = cacheline_size(); if (double_cl) size *= 2; /* return the cacheline of the address */ return (address & ~(size - 1)); } static inline u64 cl_offset(u64 address, bool double_cl) { u64 size = cacheline_size(); if (double_cl) size *= 2; /* return the offset inside cacheline */ return (address & (size - 1)); } #endif // PERF_CACHELINE_H