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: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
0804333016
commit
9823147da6
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
|
@ -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] = {
|
||||
|
@ -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"
|
||||
|
||||
|
||||
|
@ -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"
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "../../../util/tool.h"
|
||||
#include "../../../util/map.h"
|
||||
#include "../../../util/debug.h"
|
||||
#include "util/sample.h"
|
||||
|
||||
#if defined(__x86_64__)
|
||||
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -19,10 +19,10 @@
|
||||
#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
|
||||
|
@ -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>
|
||||
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "archinsn.h"
|
||||
#include "dlfilter.h"
|
||||
#include "tests.h"
|
||||
#include "util/sample.h"
|
||||
|
||||
#define MAP_START 0x400000
|
||||
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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>
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
|
@ -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__)
|
||||
|
@ -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;
|
||||
|
@ -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>
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -163,6 +163,7 @@
|
||||
#include "s390-cpumsf-kernel.h"
|
||||
#include "s390-cpumcf-kernel.h"
|
||||
#include "config.h"
|
||||
#include "util/sample.h"
|
||||
|
||||
struct s390_cpumsf {
|
||||
struct auxtrace auxtrace;
|
||||
|
@ -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)
|
||||
{
|
||||
|
117
tools/perf/util/sample.h
Normal file
117
tools/perf/util/sample.h
Normal file
@ -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 */
|
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user