perf tools: Move 'struct perf_sample' to a separate header file to disentangle headers
authorArnaldo Carvalho de Melo <acme@redhat.com>
Wed, 26 Oct 2022 20:24:27 +0000 (17:24 -0300)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 31 Oct 2022 14:06:41 +0000 (11:06 -0300)
Some places were including event.h just to get 'struct perf_sample',
move it to a separate place so that we speed up a bit the build.

Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
31 files changed:
tools/perf/arch/arm/util/unwind-libdw.c
tools/perf/arch/arm64/util/machine.c
tools/perf/arch/arm64/util/unwind-libdw.c
tools/perf/arch/powerpc/util/event.c
tools/perf/arch/powerpc/util/unwind-libdw.c
tools/perf/arch/s390/util/unwind-libdw.c
tools/perf/arch/x86/tests/sample-parsing.c
tools/perf/arch/x86/util/event.c
tools/perf/arch/x86/util/unwind-libdw.c
tools/perf/bench/inject-buildid.c
tools/perf/builtin-mem.c
tools/perf/tests/dlfilter-test.c
tools/perf/tests/mmap-basic.c
tools/perf/tests/openat-syscall-tp-fields.c
tools/perf/tests/parse-no-sample-id-all.c
tools/perf/tests/perf-record.c
tools/perf/tests/perf-time-to-tsc.c
tools/perf/tests/sw-clock.c
tools/perf/tests/switch-tracking.c
tools/perf/util/amd-sample-raw.c
tools/perf/util/auxtrace.c
tools/perf/util/branch.h
tools/perf/util/data-convert-bt.c
tools/perf/util/event.h
tools/perf/util/evlist.c
tools/perf/util/intel-pt-decoder/intel-pt-insn-decoder.c
tools/perf/util/perf_regs.c
tools/perf/util/s390-cpumsf.c
tools/perf/util/s390-sample-raw.c
tools/perf/util/sample.h [new file with mode: 0644]
tools/perf/util/trace-event-scripting.c

index b7692cb..1834a0c 100644 (file)
@@ -2,7 +2,7 @@
 #include <elfutils/libdwfl.h>
 #include "../../../util/unwind-libdw.h"
 #include "../../../util/perf_regs.h"
-#include "../../../util/event.h"
+#include "../../../util/sample.h"
 
 bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
 {
index 41c1596..235a0a1 100644 (file)
@@ -7,6 +7,7 @@
 #include "symbol.h"
 #include "callchain.h"
 #include "record.h"
+#include "util/perf_regs.h"
 
 void arch__add_leaf_frame_record_opts(struct record_opts *opts)
 {
index a509416..0938508 100644 (file)
@@ -2,7 +2,7 @@
 #include <elfutils/libdwfl.h>
 #include "../../../util/unwind-libdw.h"
 #include "../../../util/perf_regs.h"
-#include "../../../util/event.h"
+#include "../../../util/sample.h"
 
 bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
 {
index cf430a4..77d8cc2 100644 (file)
@@ -9,6 +9,7 @@
 #include "../../../util/tool.h"
 #include "../../../util/map.h"
 #include "../../../util/debug.h"
+#include "../../../util/sample.h"
 
 void arch_perf_parse_sample_weight(struct perf_sample *data,
                                   const __u64 *array, u64 type)
index 7b2d96e..e616642 100644 (file)
@@ -3,7 +3,7 @@
 #include <linux/kernel.h>
 #include "../../../util/unwind-libdw.h"
 #include "../../../util/perf_regs.h"
-#include "../../../util/event.h"
+#include "../../../util/sample.h"
 
 /* See backends/ppc_initreg.c and backends/ppc_regs.c in elfutils.  */
 static const int special_regs[3][2] = {
index 387c698..7d92452 100644 (file)
@@ -3,6 +3,7 @@
 #include "../../util/unwind-libdw.h"
 #include "../../util/perf_regs.h"
 #include "../../util/event.h"
+#include "../../util/sample.h"
 #include "dwarf-regs-table.h"
 
 
index bfbd366..690c7c0 100644 (file)
@@ -10,6 +10,7 @@
 #include "event.h"
 #include "evsel.h"
 #include "debug.h"
+#include "util/sample.h"
 #include "util/synthetic-events.h"
 
 #include "tests/tests.h"
index 55ff6ae..a3acefe 100644 (file)
@@ -10,6 +10,7 @@
 #include "../../../util/tool.h"
 #include "../../../util/map.h"
 #include "../../../util/debug.h"
+#include "util/sample.h"
 
 #if defined(__x86_64__)
 
index eea2bf8..ef71e8b 100644 (file)
@@ -2,7 +2,7 @@
 #include <elfutils/libdwfl.h>
 #include "../../../util/unwind-libdw.h"
 #include "../../../util/perf_regs.h"
-#include "../../../util/event.h"
+#include "util/sample.h"
 
 bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
 {
index 1767279..4561bda 100644 (file)
 #include "util/data.h"
 #include "util/stat.h"
 #include "util/debug.h"
-#include "util/event.h"
 #include "util/symbol.h"
 #include "util/session.h"
 #include "util/build-id.h"
+#include "util/sample.h"
 #include "util/synthetic-events.h"
 
 #define MMAP_DEV_MAJOR  8
index 923fb83..dedd612 100644 (file)
@@ -20,6 +20,7 @@
 #include "util/symbol.h"
 #include "util/pmu.h"
 #include "util/pmu-hybrid.h"
+#include "util/sample.h"
 #include "util/string2.h"
 #include <linux/err.h>
 
index 84352d5..99aa72e 100644 (file)
@@ -33,6 +33,7 @@
 #include "archinsn.h"
 #include "dlfilter.h"
 #include "tests.h"
+#include "util/sample.h"
 
 #define MAP_START 0x400000
 
index 8322fc2..6377906 100644 (file)
@@ -10,6 +10,7 @@
 #include "thread_map.h"
 #include "tests.h"
 #include "util/mmap.h"
+#include "util/sample.h"
 #include <linux/err.h>
 #include <linux/kernel.h>
 #include <linux/string.h>
index a7b2800..888df8e 100644 (file)
@@ -14,6 +14,7 @@
 #include "util/mmap.h"
 #include <errno.h>
 #include <perf/mmap.h>
+#include "util/sample.h"
 
 #ifndef O_DIRECTORY
 #define O_DIRECTORY    00200000
index d62e315..202f0a9 100644 (file)
@@ -8,6 +8,7 @@
 #include "evlist.h"
 #include "header.h"
 #include "debug.h"
+#include "util/sample.h"
 
 static int process_event(struct evlist **pevlist, union perf_event *event)
 {
index 7aa946a..d82539e 100644 (file)
@@ -11,6 +11,7 @@
 #include "record.h"
 #include "tests.h"
 #include "util/mmap.h"
+#include "util/sample.h"
 
 static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t *maskp)
 {
index c3aaa1d..efcd71c 100644 (file)
@@ -20,6 +20,7 @@
 #include "tsc.h"
 #include "mmap.h"
 #include "tests.h"
+#include "util/sample.h"
 
 /*
  * Except x86_64/i386 and Arm64, other archs don't support TSC in perf.  Just
index 9cd6fec..4d7493f 100644 (file)
@@ -13,6 +13,7 @@
 #include "util/evlist.h"
 #include "util/cpumap.h"
 #include "util/mmap.h"
+#include "util/sample.h"
 #include "util/thread_map.h"
 #include <perf/evlist.h>
 #include <perf/mmap.h>
index 87f565c..b3bd14b 100644 (file)
@@ -19,6 +19,7 @@
 #include "record.h"
 #include "tests.h"
 #include "util/mmap.h"
+#include "util/sample.h"
 #include "pmu.h"
 
 static int spin_sleep(void)
index 2383058..b0e70ce 100644 (file)
@@ -16,6 +16,7 @@
 #include "evlist.h"
 #include "sample-raw.h"
 #include "pmu-events/pmu-events.h"
+#include "util/sample.h"
 
 static u32 cpu_family, cpu_model, ibs_fetch_type, ibs_op_type;
 static bool zen4_ibs_extensions;
index 46ada5e..265d20c 100644 (file)
@@ -59,6 +59,7 @@
 #include <linux/ctype.h>
 #include "symbol/kallsyms.h"
 #include <internal/lib.h>
+#include "util/sample.h"
 
 /*
  * Make a group from 'leader' to 'last', requiring that the events were not
index 94f36a1..d6017c9 100644 (file)
@@ -10,7 +10,7 @@
 #include <linux/perf_event.h>
 #include <linux/types.h>
 #include "util/map_symbol.h"
-#include "event.h"
+#include "util/sample.h"
 
 struct branch_flags {
        union {
index 9e0aee2..c65cdaf 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/time64.h>
 #include "util.h"
 #include "clockid.h"
+#include "util/sample.h"
 
 #define pr_N(n, fmt, ...) \
        eprintf(n, debug_data_convert, fmt, ##__VA_ARGS__)
index 65495f6..8b71ac1 100644 (file)
@@ -15,6 +15,7 @@
 struct dso;
 struct machine;
 struct perf_event_attr;
+struct perf_sample;
 
 #ifdef __LP64__
 /*
@@ -42,61 +43,6 @@ struct perf_event_attr;
 /* perf sample has 16 bits size limit */
 #define PERF_SAMPLE_MAX_SIZE (1 << 16)
 
-/* number of register is bound by the number of bits in regs_dump::mask (64) */
-#define PERF_SAMPLE_REGS_CACHE_SIZE (8 * sizeof(u64))
-
-struct regs_dump {
-       u64 abi;
-       u64 mask;
-       u64 *regs;
-
-       /* Cached values/mask filled by first register access. */
-       u64 cache_regs[PERF_SAMPLE_REGS_CACHE_SIZE];
-       u64 cache_mask;
-};
-
-struct stack_dump {
-       u16 offset;
-       u64 size;
-       char *data;
-};
-
-struct sample_read_value {
-       u64 value;
-       u64 id;   /* only if PERF_FORMAT_ID */
-       u64 lost; /* only if PERF_FORMAT_LOST */
-};
-
-struct sample_read {
-       u64 time_enabled;
-       u64 time_running;
-       union {
-               struct {
-                       u64 nr;
-                       struct sample_read_value *values;
-               } group;
-               struct sample_read_value one;
-       };
-};
-
-static inline size_t sample_read_value_size(u64 read_format)
-{
-       /* PERF_FORMAT_ID is forced for PERF_SAMPLE_READ */
-       if (read_format & PERF_FORMAT_LOST)
-               return sizeof(struct sample_read_value);
-       else
-               return offsetof(struct sample_read_value, lost);
-}
-
-static inline struct sample_read_value *
-next_sample_read_value(struct sample_read_value *v, u64 read_format)
-{
-       return (void *)v + sample_read_value_size(read_format);
-}
-
-#define sample_read_group__for_each(v, nr, rf)         \
-       for (int __i = 0; __i < (int)nr; v = next_sample_read_value(v, rf), __i++)
-
 struct ip_callchain {
        u64 nr;
        u64 ips[];
@@ -138,52 +84,6 @@ enum {
        PERF_IP_FLAG_VMENTRY            |\
        PERF_IP_FLAG_VMEXIT)
 
-#define MAX_INSN 16
-
-struct aux_sample {
-       u64 size;
-       void *data;
-};
-
-struct perf_sample {
-       u64 ip;
-       u32 pid, tid;
-       u64 time;
-       u64 addr;
-       u64 id;
-       u64 stream_id;
-       u64 period;
-       u64 weight;
-       u64 transaction;
-       u64 insn_cnt;
-       u64 cyc_cnt;
-       u32 cpu;
-       u32 raw_size;
-       u64 data_src;
-       u64 phys_addr;
-       u64 data_page_size;
-       u64 code_page_size;
-       u64 cgroup;
-       u32 flags;
-       u32 machine_pid;
-       u32 vcpu;
-       u16 insn_len;
-       u8  cpumode;
-       u16 misc;
-       u16 ins_lat;
-       u16 p_stage_cyc;
-       bool no_hw_idx;         /* No hw_idx collected in branch_stack */
-       char insn[MAX_INSN];
-       void *raw_data;
-       struct ip_callchain *callchain;
-       struct branch_stack *branch_stack;
-       struct regs_dump  user_regs;
-       struct regs_dump  intr_regs;
-       struct stack_dump user_stack;
-       struct sample_read read;
-       struct aux_sample aux_sample;
-};
-
 #define PERF_MEM_DATA_SRC_NONE \
        (PERF_MEM_S(OP, NA) |\
         PERF_MEM_S(LVL, NA) |\
@@ -342,15 +242,6 @@ struct perf_synth_intel_iflag_chg {
        u64     branch_ip; /* If via_branch */
 };
 
-/*
- * raw_data is always 4 bytes from an 8-byte boundary, so subtract 4 to get
- * 8-byte alignment.
- */
-static inline void *perf_sample__synth_ptr(struct perf_sample *sample)
-{
-       return sample->raw_data - 4;
-}
-
 static inline void *perf_synth__raw_data(void *p)
 {
        return p + 4;
index 6612b00..112850d 100644 (file)
@@ -29,6 +29,7 @@
 #include "util/evsel_fprintf.h"
 #include "util/evlist-hybrid.h"
 #include "util/pmu.h"
+#include "util/sample.h"
 #include <signal.h>
 #include <unistd.h>
 #include <sched.h>
index 1376077..22308dd 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "intel-pt-insn-decoder.h"
 #include "dump-insn.h"
+#include "util/sample.h"
 
 #if INTEL_PT_INSN_BUF_SZ < MAX_INSN_SIZE || INTEL_PT_INSN_BUF_SZ > MAX_INSN
 #error Instruction buffer size too small
index 872dd3d..57a567e 100644 (file)
@@ -2,7 +2,7 @@
 #include <errno.h>
 #include <string.h>
 #include "perf_regs.h"
-#include "event.h"
+#include "util/sample.h"
 
 int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
                                 char **new_op __maybe_unused)
index f3fdad2..6fe478b 100644 (file)
 #include "s390-cpumsf-kernel.h"
 #include "s390-cpumcf-kernel.h"
 #include "config.h"
+#include "util/sample.h"
 
 struct s390_cpumsf {
        struct auxtrace         auxtrace;
index 9a631d9..c10b891 100644 (file)
@@ -28,6 +28,7 @@
 #include "sample-raw.h"
 #include "s390-cpumcf-kernel.h"
 #include "pmu-events/pmu-events.h"
+#include "util/sample.h"
 
 static size_t ctrset_size(struct cf_ctrset_entry *set)
 {
diff --git a/tools/perf/util/sample.h b/tools/perf/util/sample.h
new file mode 100644 (file)
index 0000000..60ec79d
--- /dev/null
@@ -0,0 +1,117 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __PERF_SAMPLE_H
+#define __PERF_SAMPLE_H
+
+#include <linux/perf_event.h>
+#include <linux/types.h>
+
+/* number of register is bound by the number of bits in regs_dump::mask (64) */
+#define PERF_SAMPLE_REGS_CACHE_SIZE (8 * sizeof(u64))
+
+struct regs_dump {
+       u64 abi;
+       u64 mask;
+       u64 *regs;
+
+       /* Cached values/mask filled by first register access. */
+       u64 cache_regs[PERF_SAMPLE_REGS_CACHE_SIZE];
+       u64 cache_mask;
+};
+
+struct stack_dump {
+       u16 offset;
+       u64 size;
+       char *data;
+};
+
+struct sample_read_value {
+       u64 value;
+       u64 id;   /* only if PERF_FORMAT_ID */
+       u64 lost; /* only if PERF_FORMAT_LOST */
+};
+
+struct sample_read {
+       u64 time_enabled;
+       u64 time_running;
+       union {
+               struct {
+                       u64 nr;
+                       struct sample_read_value *values;
+               } group;
+               struct sample_read_value one;
+       };
+};
+
+static inline size_t sample_read_value_size(u64 read_format)
+{
+       /* PERF_FORMAT_ID is forced for PERF_SAMPLE_READ */
+       if (read_format & PERF_FORMAT_LOST)
+               return sizeof(struct sample_read_value);
+       else
+               return offsetof(struct sample_read_value, lost);
+}
+
+static inline struct sample_read_value *next_sample_read_value(struct sample_read_value *v, u64 read_format)
+{
+       return (void *)v + sample_read_value_size(read_format);
+}
+
+#define sample_read_group__for_each(v, nr, rf) \
+       for (int __i = 0; __i < (int)nr; v = next_sample_read_value(v, rf), __i++)
+
+#define MAX_INSN 16
+
+struct aux_sample {
+       u64 size;
+       void *data;
+};
+
+struct perf_sample {
+       u64 ip;
+       u32 pid, tid;
+       u64 time;
+       u64 addr;
+       u64 id;
+       u64 stream_id;
+       u64 period;
+       u64 weight;
+       u64 transaction;
+       u64 insn_cnt;
+       u64 cyc_cnt;
+       u32 cpu;
+       u32 raw_size;
+       u64 data_src;
+       u64 phys_addr;
+       u64 data_page_size;
+       u64 code_page_size;
+       u64 cgroup;
+       u32 flags;
+       u32 machine_pid;
+       u32 vcpu;
+       u16 insn_len;
+       u8  cpumode;
+       u16 misc;
+       u16 ins_lat;
+       u16 p_stage_cyc;
+       bool no_hw_idx;         /* No hw_idx collected in branch_stack */
+       char insn[MAX_INSN];
+       void *raw_data;
+       struct ip_callchain *callchain;
+       struct branch_stack *branch_stack;
+       struct regs_dump  user_regs;
+       struct regs_dump  intr_regs;
+       struct stack_dump user_stack;
+       struct sample_read read;
+       struct aux_sample aux_sample;
+};
+
+/*
+ * raw_data is always 4 bytes from an 8-byte boundary, so subtract 4 to get
+ * 8-byte alignment.
+ */
+static inline void *perf_sample__synth_ptr(struct perf_sample *sample)
+{
+       return sample->raw_data - 4;
+}
+
+#endif /* __PERF_SAMPLE_H */
index 7172ca0..636a010 100644 (file)
@@ -12,9 +12,9 @@
 
 #include "debug.h"
 #include "trace-event.h"
-#include "event.h"
 #include "evsel.h"
 #include <linux/zalloc.h>
+#include "util/sample.h"
 
 struct scripting_context *scripting_context;