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