49 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <linux/zalloc.h>3#include "mem-info.h"4 5struct mem_info *mem_info__get(struct mem_info *mi)6{7 struct mem_info *result;8 9 if (RC_CHK_GET(result, mi))10 refcount_inc(mem_info__refcnt(mi));11 12 return result;13}14 15void mem_info__put(struct mem_info *mi)16{17 if (mi && refcount_dec_and_test(mem_info__refcnt(mi))) {18 addr_map_symbol__exit(mem_info__iaddr(mi));19 addr_map_symbol__exit(mem_info__daddr(mi));20 RC_CHK_FREE(mi);21 } else {22 RC_CHK_PUT(mi);23 }24}25 26struct mem_info *mem_info__new(void)27{28 struct mem_info *result = NULL;29 RC_STRUCT(mem_info) *mi = zalloc(sizeof(*mi));30 31 if (ADD_RC_CHK(result, mi))32 refcount_set(mem_info__refcnt(result), 1);33 34 return result;35}36 37struct mem_info *mem_info__clone(struct mem_info *mi)38{39 struct mem_info *result = mem_info__new();40 41 if (result) {42 addr_map_symbol__copy(mem_info__iaddr(result), mem_info__iaddr(mi));43 addr_map_symbol__copy(mem_info__daddr(result), mem_info__daddr(mi));44 mem_info__data_src(result)->val = mem_info__data_src(mi)->val;45 }46 47 return result;48}49