perf tools: Move 'struct perf_sample' to a separate header file to disentangle headers

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: default avatarArnaldo Carvalho de Melo <acme@redhat.com>
parent 08043330
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include <elfutils/libdwfl.h> #include <elfutils/libdwfl.h>
#include "../../../util/unwind-libdw.h" #include "../../../util/unwind-libdw.h"
#include "../../../util/perf_regs.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) bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
{ {
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "symbol.h" #include "symbol.h"
#include "callchain.h" #include "callchain.h"
#include "record.h" #include "record.h"
#include "util/perf_regs.h"
void arch__add_leaf_frame_record_opts(struct record_opts *opts) void arch__add_leaf_frame_record_opts(struct record_opts *opts)
{ {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include <elfutils/libdwfl.h> #include <elfutils/libdwfl.h>
#include "../../../util/unwind-libdw.h" #include "../../../util/unwind-libdw.h"
#include "../../../util/perf_regs.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) bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
{ {
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "../../../util/tool.h" #include "../../../util/tool.h"
#include "../../../util/map.h" #include "../../../util/map.h"
#include "../../../util/debug.h" #include "../../../util/debug.h"
#include "../../../util/sample.h"
void arch_perf_parse_sample_weight(struct perf_sample *data, void arch_perf_parse_sample_weight(struct perf_sample *data,
const __u64 *array, u64 type) const __u64 *array, u64 type)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include "../../../util/unwind-libdw.h" #include "../../../util/unwind-libdw.h"
#include "../../../util/perf_regs.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. */ /* See backends/ppc_initreg.c and backends/ppc_regs.c in elfutils. */
static const int special_regs[3][2] = { static const int special_regs[3][2] = {
......
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
#include "../../util/unwind-libdw.h" #include "../../util/unwind-libdw.h"
#include "../../util/perf_regs.h" #include "../../util/perf_regs.h"
#include "../../util/event.h" #include "../../util/event.h"
#include "../../util/sample.h"
#include "dwarf-regs-table.h" #include "dwarf-regs-table.h"
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "event.h" #include "event.h"
#include "evsel.h" #include "evsel.h"
#include "debug.h" #include "debug.h"
#include "util/sample.h"
#include "util/synthetic-events.h" #include "util/synthetic-events.h"
#include "tests/tests.h" #include "tests/tests.h"
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "../../../util/tool.h" #include "../../../util/tool.h"
#include "../../../util/map.h" #include "../../../util/map.h"
#include "../../../util/debug.h" #include "../../../util/debug.h"
#include "util/sample.h"
#if defined(__x86_64__) #if defined(__x86_64__)
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include <elfutils/libdwfl.h> #include <elfutils/libdwfl.h>
#include "../../../util/unwind-libdw.h" #include "../../../util/unwind-libdw.h"
#include "../../../util/perf_regs.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) bool libdw__arch_set_initial_registers(Dwfl_Thread *thread, void *arg)
{ {
......
...@@ -19,10 +19,10 @@ ...@@ -19,10 +19,10 @@
#include "util/data.h" #include "util/data.h"
#include "util/stat.h" #include "util/stat.h"
#include "util/debug.h" #include "util/debug.h"
#include "util/event.h"
#include "util/symbol.h" #include "util/symbol.h"
#include "util/session.h" #include "util/session.h"
#include "util/build-id.h" #include "util/build-id.h"
#include "util/sample.h"
#include "util/synthetic-events.h" #include "util/synthetic-events.h"
#define MMAP_DEV_MAJOR 8 #define MMAP_DEV_MAJOR 8
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "util/symbol.h" #include "util/symbol.h"
#include "util/pmu.h" #include "util/pmu.h"
#include "util/pmu-hybrid.h" #include "util/pmu-hybrid.h"
#include "util/sample.h"
#include "util/string2.h" #include "util/string2.h"
#include <linux/err.h> #include <linux/err.h>
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include "archinsn.h" #include "archinsn.h"
#include "dlfilter.h" #include "dlfilter.h"
#include "tests.h" #include "tests.h"
#include "util/sample.h"
#define MAP_START 0x400000 #define MAP_START 0x400000
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "thread_map.h" #include "thread_map.h"
#include "tests.h" #include "tests.h"
#include "util/mmap.h" #include "util/mmap.h"
#include "util/sample.h"
#include <linux/err.h> #include <linux/err.h>
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/string.h> #include <linux/string.h>
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "util/mmap.h" #include "util/mmap.h"
#include <errno.h> #include <errno.h>
#include <perf/mmap.h> #include <perf/mmap.h>
#include "util/sample.h"
#ifndef O_DIRECTORY #ifndef O_DIRECTORY
#define O_DIRECTORY 00200000 #define O_DIRECTORY 00200000
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include "evlist.h" #include "evlist.h"
#include "header.h" #include "header.h"
#include "debug.h" #include "debug.h"
#include "util/sample.h"
static int process_event(struct evlist **pevlist, union perf_event *event) static int process_event(struct evlist **pevlist, union perf_event *event)
{ {
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include "record.h" #include "record.h"
#include "tests.h" #include "tests.h"
#include "util/mmap.h" #include "util/mmap.h"
#include "util/sample.h"
static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t *maskp) static int sched__get_first_possible_cpu(pid_t pid, cpu_set_t *maskp)
{ {
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include "tsc.h" #include "tsc.h"
#include "mmap.h" #include "mmap.h"
#include "tests.h" #include "tests.h"
#include "util/sample.h"
/* /*
* Except x86_64/i386 and Arm64, other archs don't support TSC in perf. Just * Except x86_64/i386 and Arm64, other archs don't support TSC in perf. Just
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "util/evlist.h" #include "util/evlist.h"
#include "util/cpumap.h" #include "util/cpumap.h"
#include "util/mmap.h" #include "util/mmap.h"
#include "util/sample.h"
#include "util/thread_map.h" #include "util/thread_map.h"
#include <perf/evlist.h> #include <perf/evlist.h>
#include <perf/mmap.h> #include <perf/mmap.h>
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
#include "record.h" #include "record.h"
#include "tests.h" #include "tests.h"
#include "util/mmap.h" #include "util/mmap.h"
#include "util/sample.h"
#include "pmu.h" #include "pmu.h"
static int spin_sleep(void) static int spin_sleep(void)
......
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
#include "evlist.h" #include "evlist.h"
#include "sample-raw.h" #include "sample-raw.h"
#include "pmu-events/pmu-events.h" #include "pmu-events/pmu-events.h"
#include "util/sample.h"
static u32 cpu_family, cpu_model, ibs_fetch_type, ibs_op_type; static u32 cpu_family, cpu_model, ibs_fetch_type, ibs_op_type;
static bool zen4_ibs_extensions; static bool zen4_ibs_extensions;
......
...@@ -59,6 +59,7 @@ ...@@ -59,6 +59,7 @@
#include <linux/ctype.h> #include <linux/ctype.h>
#include "symbol/kallsyms.h" #include "symbol/kallsyms.h"
#include <internal/lib.h> #include <internal/lib.h>
#include "util/sample.h"
/* /*
* Make a group from 'leader' to 'last', requiring that the events were not * Make a group from 'leader' to 'last', requiring that the events were not
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
#include <linux/perf_event.h> #include <linux/perf_event.h>
#include <linux/types.h> #include <linux/types.h>
#include "util/map_symbol.h" #include "util/map_symbol.h"
#include "event.h" #include "util/sample.h"
struct branch_flags { struct branch_flags {
union { union {
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/time64.h> #include <linux/time64.h>
#include "util.h" #include "util.h"
#include "clockid.h" #include "clockid.h"
#include "util/sample.h"
#define pr_N(n, fmt, ...) \ #define pr_N(n, fmt, ...) \
eprintf(n, debug_data_convert, fmt, ##__VA_ARGS__) eprintf(n, debug_data_convert, fmt, ##__VA_ARGS__)
......
...@@ -15,6 +15,7 @@ ...@@ -15,6 +15,7 @@
struct dso; struct dso;
struct machine; struct machine;
struct perf_event_attr; struct perf_event_attr;
struct perf_sample;
#ifdef __LP64__ #ifdef __LP64__
/* /*
...@@ -42,61 +43,6 @@ struct perf_event_attr; ...@@ -42,61 +43,6 @@ struct perf_event_attr;
/* perf sample has 16 bits size limit */ /* perf sample has 16 bits size limit */
#define PERF_SAMPLE_MAX_SIZE (1 << 16) #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 { struct ip_callchain {
u64 nr; u64 nr;
u64 ips[]; u64 ips[];
...@@ -138,52 +84,6 @@ enum { ...@@ -138,52 +84,6 @@ enum {
PERF_IP_FLAG_VMENTRY |\ PERF_IP_FLAG_VMENTRY |\
PERF_IP_FLAG_VMEXIT) 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 \ #define PERF_MEM_DATA_SRC_NONE \
(PERF_MEM_S(OP, NA) |\ (PERF_MEM_S(OP, NA) |\
PERF_MEM_S(LVL, NA) |\ PERF_MEM_S(LVL, NA) |\
...@@ -342,15 +242,6 @@ struct perf_synth_intel_iflag_chg { ...@@ -342,15 +242,6 @@ struct perf_synth_intel_iflag_chg {
u64 branch_ip; /* If via_branch */ 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) static inline void *perf_synth__raw_data(void *p)
{ {
return p + 4; return p + 4;
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include "util/evsel_fprintf.h" #include "util/evsel_fprintf.h"
#include "util/evlist-hybrid.h" #include "util/evlist-hybrid.h"
#include "util/pmu.h" #include "util/pmu.h"
#include "util/sample.h"
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
#include <sched.h> #include <sched.h>
......
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#include "intel-pt-insn-decoder.h" #include "intel-pt-insn-decoder.h"
#include "dump-insn.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 #if INTEL_PT_INSN_BUF_SZ < MAX_INSN_SIZE || INTEL_PT_INSN_BUF_SZ > MAX_INSN
#error Instruction buffer size too small #error Instruction buffer size too small
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
#include <errno.h> #include <errno.h>
#include <string.h> #include <string.h>
#include "perf_regs.h" #include "perf_regs.h"
#include "event.h" #include "util/sample.h"
int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused, int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
char **new_op __maybe_unused) char **new_op __maybe_unused)
......
...@@ -163,6 +163,7 @@ ...@@ -163,6 +163,7 @@
#include "s390-cpumsf-kernel.h" #include "s390-cpumsf-kernel.h"
#include "s390-cpumcf-kernel.h" #include "s390-cpumcf-kernel.h"
#include "config.h" #include "config.h"
#include "util/sample.h"
struct s390_cpumsf { struct s390_cpumsf {
struct auxtrace auxtrace; struct auxtrace auxtrace;
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include "sample-raw.h" #include "sample-raw.h"
#include "s390-cpumcf-kernel.h" #include "s390-cpumcf-kernel.h"
#include "pmu-events/pmu-events.h" #include "pmu-events/pmu-events.h"
#include "util/sample.h"
static size_t ctrset_size(struct cf_ctrset_entry *set) static size_t ctrset_size(struct cf_ctrset_entry *set)
{ {
......
/* 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 */
...@@ -12,9 +12,9 @@ ...@@ -12,9 +12,9 @@
#include "debug.h" #include "debug.h"
#include "trace-event.h" #include "trace-event.h"
#include "event.h"
#include "evsel.h" #include "evsel.h"
#include <linux/zalloc.h> #include <linux/zalloc.h>
#include "util/sample.h"
struct scripting_context *scripting_context; struct scripting_context *scripting_context;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment