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

source code of linux/tools/perf/util/cacheline.h