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