| /* 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 |