xref: /linux/tools/perf/util/mem-info.h (revision 4b132aacb0768ac1e652cf517097ea6f237214b9)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __PERF_MEM_INFO_H
3 #define __PERF_MEM_INFO_H
4 
5 #include <linux/refcount.h>
6 #include <linux/perf_event.h>
7 #include <internal/rc_check.h>
8 #include "map_symbol.h"
9 
10 DECLARE_RC_STRUCT(mem_info) {
11 	struct addr_map_symbol	iaddr;
12 	struct addr_map_symbol	daddr;
13 	union perf_mem_data_src	data_src;
14 	refcount_t		refcnt;
15 };
16 
17 struct mem_info *mem_info__new(void);
18 struct mem_info *mem_info__get(struct mem_info *mi);
19 void   mem_info__put(struct mem_info *mi);
20 
21 static inline void __mem_info__zput(struct mem_info **mi)
22 {
23 	mem_info__put(*mi);
24 	*mi = NULL;
25 }
26 
27 #define mem_info__zput(mi) __mem_info__zput(&mi)
28 
29 static inline struct addr_map_symbol *mem_info__iaddr(struct mem_info *mi)
30 {
31 	return &RC_CHK_ACCESS(mi)->iaddr;
32 }
33 
34 static inline struct addr_map_symbol *mem_info__daddr(struct mem_info *mi)
35 {
36 	return &RC_CHK_ACCESS(mi)->daddr;
37 }
38 
39 static inline union perf_mem_data_src *mem_info__data_src(struct mem_info *mi)
40 {
41 	return &RC_CHK_ACCESS(mi)->data_src;
42 }
43 
44 static inline const union perf_mem_data_src *mem_info__const_data_src(const struct mem_info *mi)
45 {
46 	return &RC_CHK_ACCESS(mi)->data_src;
47 }
48 
49 static inline refcount_t *mem_info__refcnt(struct mem_info *mi)
50 {
51 	return &RC_CHK_ACCESS(mi)->refcnt;
52 }
53 
54 #endif /* __PERF_MEM_INFO_H */
55