| 1 |
|
| 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 |
|
| 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 |
|
| 33 | return (address & (size - 1));
|
| 34 | }
|
| 35 |
|
| 36 | #endif |