Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf mem-info: Move mem-info out of mem-events and symbol

Move mem-info to its own header rather than having it split between
mem-events and symbol.

Signed-off-by: Ian Rogers <irogers@google.com>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com>
Cc: Ben Gainey <ben.gainey@arm.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: James Clark <james.clark@arm.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: K Prateek Nayak <kprateek.nayak@amd.com>
Cc: Kajol Jain <kjain@linux.ibm.com>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Li Dong <lidong@vivo.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Oliver Upton <oliver.upton@linux.dev>
Cc: Paran Lee <p4ranlee@gmail.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi Bangoria <ravi.bangoria@amd.com>
Cc: Sun Haiyong <sunhaiyong@loongson.cn>
Cc: Tim Chen <tim.c.chen@linux.intel.com>
Cc: Yanteng Si <siyanteng@loongson.cn>
Cc: Yicong Yang <yangyicong@hisilicon.com>
Link: https://lore.kernel.org/r/20240507183545.1236093-7-irogers@google.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Ian Rogers and committed by
Arnaldo Carvalho de Melo
ad3003a6 13ca6287

+85 -63
+1
tools/perf/builtin-c2c.c
··· 38 38 #include "ui/browsers/hists.h" 39 39 #include "thread.h" 40 40 #include "mem2node.h" 41 + #include "mem-info.h" 41 42 #include "symbol.h" 42 43 #include "ui/ui.h" 43 44 #include "ui/progress.h"
+1
tools/perf/builtin-report.c
··· 31 31 #include "util/evsel.h" 32 32 #include "util/evswitch.h" 33 33 #include "util/header.h" 34 + #include "util/mem-info.h" 34 35 #include "util/session.h" 35 36 #include "util/srcline.h" 36 37 #include "util/tool.h"
+1
tools/perf/builtin-script.c
··· 32 32 #include "util/time-utils.h" 33 33 #include "util/path.h" 34 34 #include "util/event.h" 35 + #include "util/mem-info.h" 35 36 #include "ui/ui.h" 36 37 #include "print_binary.h" 37 38 #include "print_insn.h"
+1
tools/perf/tests/mem.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 2 2 #include "util/map_symbol.h" 3 3 #include "util/mem-events.h" 4 + #include "util/mem-info.h" 4 5 #include "util/symbol.h" 5 6 #include "linux/perf_event.h" 6 7 #include "util/debug.h"
+1
tools/perf/util/Build
··· 141 141 perf-y += help-unknown-cmd.o 142 142 perf-y += dlfilter.o 143 143 perf-y += mem-events.o 144 + perf-y += mem-info.o 144 145 perf-y += vsprintf.o 145 146 perf-y += units.o 146 147 perf-y += time-utils.o
+1
tools/perf/util/hist.c
··· 9 9 #include "map_symbol.h" 10 10 #include "branch.h" 11 11 #include "mem-events.h" 12 + #include "mem-info.h" 12 13 #include "session.h" 13 14 #include "namespaces.h" 14 15 #include "cgroup.h"
+1
tools/perf/util/machine.c
··· 16 16 #include "map_symbol.h" 17 17 #include "branch.h" 18 18 #include "mem-events.h" 19 + #include "mem-info.h" 19 20 #include "path.h" 20 21 #include "srcline.h" 21 22 #include "symbol.h"
+9 -7
tools/perf/util/mem-events.c
··· 10 10 #include <linux/kernel.h> 11 11 #include "map_symbol.h" 12 12 #include "mem-events.h" 13 + #include "mem-info.h" 13 14 #include "debug.h" 15 + #include "evsel.h" 14 16 #include "symbol.h" 15 17 #include "pmu.h" 16 18 #include "pmus.h" ··· 283 281 "Fault", 284 282 }; 285 283 286 - int perf_mem__tlb_scnprintf(char *out, size_t sz, struct mem_info *mem_info) 284 + int perf_mem__tlb_scnprintf(char *out, size_t sz, const struct mem_info *mem_info) 287 285 { 288 286 size_t l = 0, i; 289 287 u64 m = PERF_MEM_TLB_NA; ··· 361 359 "board", 362 360 }; 363 361 364 - static int perf_mem__op_scnprintf(char *out, size_t sz, struct mem_info *mem_info) 362 + static int perf_mem__op_scnprintf(char *out, size_t sz, const struct mem_info *mem_info) 365 363 { 366 364 u64 op = PERF_MEM_LOCK_NA; 367 365 int l; ··· 385 383 return l; 386 384 } 387 385 388 - int perf_mem__lvl_scnprintf(char *out, size_t sz, struct mem_info *mem_info) 386 + int perf_mem__lvl_scnprintf(char *out, size_t sz, const struct mem_info *mem_info) 389 387 { 390 388 union perf_mem_data_src data_src; 391 389 int printed = 0; ··· 467 465 "Peer", 468 466 }; 469 467 470 - int perf_mem__snp_scnprintf(char *out, size_t sz, struct mem_info *mem_info) 468 + int perf_mem__snp_scnprintf(char *out, size_t sz, const struct mem_info *mem_info) 471 469 { 472 470 size_t i, l = 0; 473 471 u64 m = PERF_MEM_SNOOP_NA; ··· 509 507 return l; 510 508 } 511 509 512 - int perf_mem__lck_scnprintf(char *out, size_t sz, struct mem_info *mem_info) 510 + int perf_mem__lck_scnprintf(char *out, size_t sz, const struct mem_info *mem_info) 513 511 { 514 512 u64 mask = PERF_MEM_LOCK_NA; 515 513 int l; ··· 527 525 return l; 528 526 } 529 527 530 - int perf_mem__blk_scnprintf(char *out, size_t sz, struct mem_info *mem_info) 528 + int perf_mem__blk_scnprintf(char *out, size_t sz, const struct mem_info *mem_info) 531 529 { 532 530 size_t l = 0; 533 531 u64 mask = PERF_MEM_BLK_NA; ··· 550 548 return l; 551 549 } 552 550 553 - int perf_script__meminfo_scnprintf(char *out, size_t sz, struct mem_info *mem_info) 551 + int perf_script__meminfo_scnprintf(char *out, size_t sz, const struct mem_info *mem_info) 554 552 { 555 553 int i = 0; 556 554
+10 -19
tools/perf/util/mem-events.h
··· 3 3 #define __PERF_MEM_EVENTS_H 4 4 5 5 #include <stdbool.h> 6 - #include <stdint.h> 7 - #include <stdio.h> 8 6 #include <linux/types.h> 9 - #include <linux/refcount.h> 10 - #include <linux/perf_event.h> 11 - #include "stat.h" 12 - #include "evsel.h" 13 7 14 8 struct perf_mem_event { 15 9 bool record; ··· 15 21 const char *event_name; 16 22 }; 17 23 18 - struct mem_info { 19 - struct addr_map_symbol iaddr; 20 - struct addr_map_symbol daddr; 21 - union perf_mem_data_src data_src; 22 - refcount_t refcnt; 23 - }; 24 - 25 24 enum { 26 25 PERF_MEM_EVENTS__LOAD, 27 26 PERF_MEM_EVENTS__STORE, 28 27 PERF_MEM_EVENTS__LOAD_STORE, 29 28 PERF_MEM_EVENTS__MAX, 30 29 }; 30 + 31 + struct evsel; 32 + struct mem_info; 33 + struct perf_pmu; 31 34 32 35 extern unsigned int perf_mem_events__loads_ldlat; 33 36 extern struct perf_mem_event perf_mem_events[PERF_MEM_EVENTS__MAX]; ··· 40 49 void perf_pmu__mem_events_list(struct perf_pmu *pmu); 41 50 int perf_mem_events__record_args(const char **rec_argv, int *argv_nr); 42 51 43 - int perf_mem__tlb_scnprintf(char *out, size_t sz, struct mem_info *mem_info); 44 - int perf_mem__lvl_scnprintf(char *out, size_t sz, struct mem_info *mem_info); 45 - int perf_mem__snp_scnprintf(char *out, size_t sz, struct mem_info *mem_info); 46 - int perf_mem__lck_scnprintf(char *out, size_t sz, struct mem_info *mem_info); 47 - int perf_mem__blk_scnprintf(char *out, size_t sz, struct mem_info *mem_info); 52 + int perf_mem__tlb_scnprintf(char *out, size_t sz, const struct mem_info *mem_info); 53 + int perf_mem__lvl_scnprintf(char *out, size_t sz, const struct mem_info *mem_info); 54 + int perf_mem__snp_scnprintf(char *out, size_t sz, const struct mem_info *mem_info); 55 + int perf_mem__lck_scnprintf(char *out, size_t sz, const struct mem_info *mem_info); 56 + int perf_mem__blk_scnprintf(char *out, size_t sz, const struct mem_info *mem_info); 48 57 49 - int perf_script__meminfo_scnprintf(char *bf, size_t size, struct mem_info *mem_info); 58 + int perf_script__meminfo_scnprintf(char *bf, size_t size, const struct mem_info *mem_info); 50 59 51 60 struct c2c_stats { 52 61 u32 nr_entries;
+28
tools/perf/util/mem-info.c
··· 1 + // SPDX-License-Identifier: GPL-2.0 2 + #include <linux/zalloc.h> 3 + #include "mem-info.h" 4 + 5 + struct mem_info *mem_info__get(struct mem_info *mi) 6 + { 7 + if (mi) 8 + refcount_inc(&mi->refcnt); 9 + return mi; 10 + } 11 + 12 + void mem_info__put(struct mem_info *mi) 13 + { 14 + if (mi && refcount_dec_and_test(&mi->refcnt)) { 15 + addr_map_symbol__exit(&mi->iaddr); 16 + addr_map_symbol__exit(&mi->daddr); 17 + free(mi); 18 + } 19 + } 20 + 21 + struct mem_info *mem_info__new(void) 22 + { 23 + struct mem_info *mi = zalloc(sizeof(*mi)); 24 + 25 + if (mi) 26 + refcount_set(&mi->refcnt, 1); 27 + return mi; 28 + }
+28
tools/perf/util/mem-info.h
··· 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 "map_symbol.h" 8 + 9 + struct mem_info { 10 + struct addr_map_symbol iaddr; 11 + struct addr_map_symbol daddr; 12 + union perf_mem_data_src data_src; 13 + refcount_t refcnt; 14 + }; 15 + 16 + struct mem_info *mem_info__new(void); 17 + struct mem_info *mem_info__get(struct mem_info *mi); 18 + void mem_info__put(struct mem_info *mi); 19 + 20 + static inline void __mem_info__zput(struct mem_info **mi) 21 + { 22 + mem_info__put(*mi); 23 + *mi = NULL; 24 + } 25 + 26 + #define mem_info__zput(mi) __mem_info__zput(&mi) 27 + 28 + #endif /* __PERF_MEM_INFO_H */
+1
tools/perf/util/scripting-engines/trace-event-python.c
··· 45 45 #include "../thread.h" 46 46 #include "../comm.h" 47 47 #include "../machine.h" 48 + #include "../mem-info.h" 48 49 #include "../db-export.h" 49 50 #include "../thread-stack.h" 50 51 #include "../trace-event.h"
+1
tools/perf/util/sort.c
··· 23 23 #include "strlist.h" 24 24 #include "strbuf.h" 25 25 #include "mem-events.h" 26 + #include "mem-info.h" 26 27 #include "annotate.h" 27 28 #include "annotate-data.h" 28 29 #include "event.h"
+1 -25
tools/perf/util/symbol.c
··· 27 27 #include "symbol.h" 28 28 #include "map_symbol.h" 29 29 #include "mem-events.h" 30 + #include "mem-info.h" 30 31 #include "symsrc.h" 31 32 #include "strlist.h" 32 33 #include "intlist.h" ··· 2569 2568 2570 2569 free(bf); 2571 2570 return 0; 2572 - } 2573 - 2574 - struct mem_info *mem_info__get(struct mem_info *mi) 2575 - { 2576 - if (mi) 2577 - refcount_inc(&mi->refcnt); 2578 - return mi; 2579 - } 2580 - 2581 - void mem_info__put(struct mem_info *mi) 2582 - { 2583 - if (mi && refcount_dec_and_test(&mi->refcnt)) { 2584 - addr_map_symbol__exit(&mi->iaddr); 2585 - addr_map_symbol__exit(&mi->daddr); 2586 - free(mi); 2587 - } 2588 - } 2589 - 2590 - struct mem_info *mem_info__new(void) 2591 - { 2592 - struct mem_info *mi = zalloc(sizeof(*mi)); 2593 - 2594 - if (mi) 2595 - refcount_set(&mi->refcnt, 1); 2596 - return mi; 2597 2571 } 2598 2572 2599 2573 /*
-12
tools/perf/util/symbol.h
··· 268 268 SDT_NOTE_IDX_REFCTR, 269 269 }; 270 270 271 - struct mem_info *mem_info__new(void); 272 - struct mem_info *mem_info__get(struct mem_info *mi); 273 - void mem_info__put(struct mem_info *mi); 274 - 275 - static inline void __mem_info__zput(struct mem_info **mi) 276 - { 277 - mem_info__put(*mi); 278 - *mi = NULL; 279 - } 280 - 281 - #define mem_info__zput(mi) __mem_info__zput(&mi) 282 - 283 271 int symbol__validate_sym_arguments(void); 284 272 285 273 #endif /* __PERF_SYMBOL */