162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __PERF_RECORD_H 362306a36Sopenharmony_ci#define __PERF_RECORD_H 462306a36Sopenharmony_ci/* 562306a36Sopenharmony_ci * The linux/stddef.h isn't need here, but is needed for __always_inline used 662306a36Sopenharmony_ci * in files included from uapi/linux/perf_event.h such as 762306a36Sopenharmony_ci * /usr/include/linux/swab.h and /usr/include/linux/byteorder/little_endian.h, 862306a36Sopenharmony_ci * detected in at least musl libc, used in Alpine Linux. -acme 962306a36Sopenharmony_ci */ 1062306a36Sopenharmony_ci#include <stdio.h> 1162306a36Sopenharmony_ci#include <linux/stddef.h> 1262306a36Sopenharmony_ci#include <perf/event.h> 1362306a36Sopenharmony_ci#include <linux/types.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct dso; 1662306a36Sopenharmony_cistruct machine; 1762306a36Sopenharmony_cistruct perf_event_attr; 1862306a36Sopenharmony_cistruct perf_sample; 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#ifdef __LP64__ 2162306a36Sopenharmony_ci/* 2262306a36Sopenharmony_ci * /usr/include/inttypes.h uses just 'lu' for PRIu64, but we end up defining 2362306a36Sopenharmony_ci * __u64 as long long unsigned int, and then -Werror=format= kicks in and 2462306a36Sopenharmony_ci * complains of the mismatched types, so use these two special extra PRI 2562306a36Sopenharmony_ci * macros to overcome that. 2662306a36Sopenharmony_ci */ 2762306a36Sopenharmony_ci#define PRI_lu64 "l" PRIu64 2862306a36Sopenharmony_ci#define PRI_lx64 "l" PRIx64 2962306a36Sopenharmony_ci#define PRI_ld64 "l" PRId64 3062306a36Sopenharmony_ci#else 3162306a36Sopenharmony_ci#define PRI_lu64 PRIu64 3262306a36Sopenharmony_ci#define PRI_lx64 PRIx64 3362306a36Sopenharmony_ci#define PRI_ld64 PRId64 3462306a36Sopenharmony_ci#endif 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci#define PERF_SAMPLE_MASK \ 3762306a36Sopenharmony_ci (PERF_SAMPLE_IP | PERF_SAMPLE_TID | \ 3862306a36Sopenharmony_ci PERF_SAMPLE_TIME | PERF_SAMPLE_ADDR | \ 3962306a36Sopenharmony_ci PERF_SAMPLE_ID | PERF_SAMPLE_STREAM_ID | \ 4062306a36Sopenharmony_ci PERF_SAMPLE_CPU | PERF_SAMPLE_PERIOD | \ 4162306a36Sopenharmony_ci PERF_SAMPLE_IDENTIFIER) 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci/* perf sample has 16 bits size limit */ 4462306a36Sopenharmony_ci#define PERF_SAMPLE_MAX_SIZE (1 << 16) 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_cistruct ip_callchain { 4762306a36Sopenharmony_ci u64 nr; 4862306a36Sopenharmony_ci u64 ips[]; 4962306a36Sopenharmony_ci}; 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_cistruct branch_stack; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cienum { 5462306a36Sopenharmony_ci PERF_IP_FLAG_BRANCH = 1ULL << 0, 5562306a36Sopenharmony_ci PERF_IP_FLAG_CALL = 1ULL << 1, 5662306a36Sopenharmony_ci PERF_IP_FLAG_RETURN = 1ULL << 2, 5762306a36Sopenharmony_ci PERF_IP_FLAG_CONDITIONAL = 1ULL << 3, 5862306a36Sopenharmony_ci PERF_IP_FLAG_SYSCALLRET = 1ULL << 4, 5962306a36Sopenharmony_ci PERF_IP_FLAG_ASYNC = 1ULL << 5, 6062306a36Sopenharmony_ci PERF_IP_FLAG_INTERRUPT = 1ULL << 6, 6162306a36Sopenharmony_ci PERF_IP_FLAG_TX_ABORT = 1ULL << 7, 6262306a36Sopenharmony_ci PERF_IP_FLAG_TRACE_BEGIN = 1ULL << 8, 6362306a36Sopenharmony_ci PERF_IP_FLAG_TRACE_END = 1ULL << 9, 6462306a36Sopenharmony_ci PERF_IP_FLAG_IN_TX = 1ULL << 10, 6562306a36Sopenharmony_ci PERF_IP_FLAG_VMENTRY = 1ULL << 11, 6662306a36Sopenharmony_ci PERF_IP_FLAG_VMEXIT = 1ULL << 12, 6762306a36Sopenharmony_ci PERF_IP_FLAG_INTR_DISABLE = 1ULL << 13, 6862306a36Sopenharmony_ci PERF_IP_FLAG_INTR_TOGGLE = 1ULL << 14, 6962306a36Sopenharmony_ci}; 7062306a36Sopenharmony_ci 7162306a36Sopenharmony_ci#define PERF_IP_FLAG_CHARS "bcrosyiABExghDt" 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci#define PERF_BRANCH_MASK (\ 7462306a36Sopenharmony_ci PERF_IP_FLAG_BRANCH |\ 7562306a36Sopenharmony_ci PERF_IP_FLAG_CALL |\ 7662306a36Sopenharmony_ci PERF_IP_FLAG_RETURN |\ 7762306a36Sopenharmony_ci PERF_IP_FLAG_CONDITIONAL |\ 7862306a36Sopenharmony_ci PERF_IP_FLAG_SYSCALLRET |\ 7962306a36Sopenharmony_ci PERF_IP_FLAG_ASYNC |\ 8062306a36Sopenharmony_ci PERF_IP_FLAG_INTERRUPT |\ 8162306a36Sopenharmony_ci PERF_IP_FLAG_TX_ABORT |\ 8262306a36Sopenharmony_ci PERF_IP_FLAG_TRACE_BEGIN |\ 8362306a36Sopenharmony_ci PERF_IP_FLAG_TRACE_END |\ 8462306a36Sopenharmony_ci PERF_IP_FLAG_VMENTRY |\ 8562306a36Sopenharmony_ci PERF_IP_FLAG_VMEXIT) 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ci#define PERF_MEM_DATA_SRC_NONE \ 8862306a36Sopenharmony_ci (PERF_MEM_S(OP, NA) |\ 8962306a36Sopenharmony_ci PERF_MEM_S(LVL, NA) |\ 9062306a36Sopenharmony_ci PERF_MEM_S(SNOOP, NA) |\ 9162306a36Sopenharmony_ci PERF_MEM_S(LOCK, NA) |\ 9262306a36Sopenharmony_ci PERF_MEM_S(TLB, NA) |\ 9362306a36Sopenharmony_ci PERF_MEM_S(LVLNUM, NA)) 9462306a36Sopenharmony_ci 9562306a36Sopenharmony_ci/* Attribute type for custom synthesized events */ 9662306a36Sopenharmony_ci#define PERF_TYPE_SYNTH (INT_MAX + 1U) 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ci/* Attribute config for custom synthesized events */ 9962306a36Sopenharmony_cienum perf_synth_id { 10062306a36Sopenharmony_ci PERF_SYNTH_INTEL_PTWRITE, 10162306a36Sopenharmony_ci PERF_SYNTH_INTEL_MWAIT, 10262306a36Sopenharmony_ci PERF_SYNTH_INTEL_PWRE, 10362306a36Sopenharmony_ci PERF_SYNTH_INTEL_EXSTOP, 10462306a36Sopenharmony_ci PERF_SYNTH_INTEL_PWRX, 10562306a36Sopenharmony_ci PERF_SYNTH_INTEL_CBR, 10662306a36Sopenharmony_ci PERF_SYNTH_INTEL_PSB, 10762306a36Sopenharmony_ci PERF_SYNTH_INTEL_EVT, 10862306a36Sopenharmony_ci PERF_SYNTH_INTEL_IFLAG_CHG, 10962306a36Sopenharmony_ci}; 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci/* 11262306a36Sopenharmony_ci * Raw data formats for synthesized events. Note that 4 bytes of padding are 11362306a36Sopenharmony_ci * present to match the 'size' member of PERF_SAMPLE_RAW data which is always 11462306a36Sopenharmony_ci * 8-byte aligned. That means we must dereference raw_data with an offset of 4. 11562306a36Sopenharmony_ci * Refer perf_sample__synth_ptr() and perf_synth__raw_data(). It also means the 11662306a36Sopenharmony_ci * structure sizes are 4 bytes bigger than the raw_size, refer 11762306a36Sopenharmony_ci * perf_synth__raw_size(). 11862306a36Sopenharmony_ci */ 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_cistruct perf_synth_intel_ptwrite { 12162306a36Sopenharmony_ci u32 padding; 12262306a36Sopenharmony_ci union { 12362306a36Sopenharmony_ci struct { 12462306a36Sopenharmony_ci u32 ip : 1, 12562306a36Sopenharmony_ci reserved : 31; 12662306a36Sopenharmony_ci }; 12762306a36Sopenharmony_ci u32 flags; 12862306a36Sopenharmony_ci }; 12962306a36Sopenharmony_ci u64 payload; 13062306a36Sopenharmony_ci}; 13162306a36Sopenharmony_ci 13262306a36Sopenharmony_cistruct perf_synth_intel_mwait { 13362306a36Sopenharmony_ci u32 padding; 13462306a36Sopenharmony_ci u32 reserved; 13562306a36Sopenharmony_ci union { 13662306a36Sopenharmony_ci struct { 13762306a36Sopenharmony_ci u64 hints : 8, 13862306a36Sopenharmony_ci reserved1 : 24, 13962306a36Sopenharmony_ci extensions : 2, 14062306a36Sopenharmony_ci reserved2 : 30; 14162306a36Sopenharmony_ci }; 14262306a36Sopenharmony_ci u64 payload; 14362306a36Sopenharmony_ci }; 14462306a36Sopenharmony_ci}; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_cistruct perf_synth_intel_pwre { 14762306a36Sopenharmony_ci u32 padding; 14862306a36Sopenharmony_ci u32 reserved; 14962306a36Sopenharmony_ci union { 15062306a36Sopenharmony_ci struct { 15162306a36Sopenharmony_ci u64 reserved1 : 7, 15262306a36Sopenharmony_ci hw : 1, 15362306a36Sopenharmony_ci subcstate : 4, 15462306a36Sopenharmony_ci cstate : 4, 15562306a36Sopenharmony_ci reserved2 : 48; 15662306a36Sopenharmony_ci }; 15762306a36Sopenharmony_ci u64 payload; 15862306a36Sopenharmony_ci }; 15962306a36Sopenharmony_ci}; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_cistruct perf_synth_intel_exstop { 16262306a36Sopenharmony_ci u32 padding; 16362306a36Sopenharmony_ci union { 16462306a36Sopenharmony_ci struct { 16562306a36Sopenharmony_ci u32 ip : 1, 16662306a36Sopenharmony_ci reserved : 31; 16762306a36Sopenharmony_ci }; 16862306a36Sopenharmony_ci u32 flags; 16962306a36Sopenharmony_ci }; 17062306a36Sopenharmony_ci}; 17162306a36Sopenharmony_ci 17262306a36Sopenharmony_cistruct perf_synth_intel_pwrx { 17362306a36Sopenharmony_ci u32 padding; 17462306a36Sopenharmony_ci u32 reserved; 17562306a36Sopenharmony_ci union { 17662306a36Sopenharmony_ci struct { 17762306a36Sopenharmony_ci u64 deepest_cstate : 4, 17862306a36Sopenharmony_ci last_cstate : 4, 17962306a36Sopenharmony_ci wake_reason : 4, 18062306a36Sopenharmony_ci reserved1 : 52; 18162306a36Sopenharmony_ci }; 18262306a36Sopenharmony_ci u64 payload; 18362306a36Sopenharmony_ci }; 18462306a36Sopenharmony_ci}; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_cistruct perf_synth_intel_cbr { 18762306a36Sopenharmony_ci u32 padding; 18862306a36Sopenharmony_ci union { 18962306a36Sopenharmony_ci struct { 19062306a36Sopenharmony_ci u32 cbr : 8, 19162306a36Sopenharmony_ci reserved1 : 8, 19262306a36Sopenharmony_ci max_nonturbo : 8, 19362306a36Sopenharmony_ci reserved2 : 8; 19462306a36Sopenharmony_ci }; 19562306a36Sopenharmony_ci u32 flags; 19662306a36Sopenharmony_ci }; 19762306a36Sopenharmony_ci u32 freq; 19862306a36Sopenharmony_ci u32 reserved3; 19962306a36Sopenharmony_ci}; 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_cistruct perf_synth_intel_psb { 20262306a36Sopenharmony_ci u32 padding; 20362306a36Sopenharmony_ci u32 reserved; 20462306a36Sopenharmony_ci u64 offset; 20562306a36Sopenharmony_ci}; 20662306a36Sopenharmony_ci 20762306a36Sopenharmony_cistruct perf_synth_intel_evd { 20862306a36Sopenharmony_ci union { 20962306a36Sopenharmony_ci struct { 21062306a36Sopenharmony_ci u8 evd_type; 21162306a36Sopenharmony_ci u8 reserved[7]; 21262306a36Sopenharmony_ci }; 21362306a36Sopenharmony_ci u64 et; 21462306a36Sopenharmony_ci }; 21562306a36Sopenharmony_ci u64 payload; 21662306a36Sopenharmony_ci}; 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci/* Intel PT Event Trace */ 21962306a36Sopenharmony_cistruct perf_synth_intel_evt { 22062306a36Sopenharmony_ci u32 padding; 22162306a36Sopenharmony_ci union { 22262306a36Sopenharmony_ci struct { 22362306a36Sopenharmony_ci u32 type : 5, 22462306a36Sopenharmony_ci reserved : 2, 22562306a36Sopenharmony_ci ip : 1, 22662306a36Sopenharmony_ci vector : 8, 22762306a36Sopenharmony_ci evd_cnt : 16; 22862306a36Sopenharmony_ci }; 22962306a36Sopenharmony_ci u32 cfe; 23062306a36Sopenharmony_ci }; 23162306a36Sopenharmony_ci struct perf_synth_intel_evd evd[0]; 23262306a36Sopenharmony_ci}; 23362306a36Sopenharmony_ci 23462306a36Sopenharmony_cistruct perf_synth_intel_iflag_chg { 23562306a36Sopenharmony_ci u32 padding; 23662306a36Sopenharmony_ci union { 23762306a36Sopenharmony_ci struct { 23862306a36Sopenharmony_ci u32 iflag : 1, 23962306a36Sopenharmony_ci via_branch : 1; 24062306a36Sopenharmony_ci }; 24162306a36Sopenharmony_ci u32 flags; 24262306a36Sopenharmony_ci }; 24362306a36Sopenharmony_ci u64 branch_ip; /* If via_branch */ 24462306a36Sopenharmony_ci}; 24562306a36Sopenharmony_ci 24662306a36Sopenharmony_cistatic inline void *perf_synth__raw_data(void *p) 24762306a36Sopenharmony_ci{ 24862306a36Sopenharmony_ci return p + 4; 24962306a36Sopenharmony_ci} 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci#define perf_synth__raw_size(d) (sizeof(d) - 4) 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_ci#define perf_sample__bad_synth_size(s, d) ((s)->raw_size < sizeof(d) - 4) 25462306a36Sopenharmony_ci 25562306a36Sopenharmony_cienum { 25662306a36Sopenharmony_ci PERF_STAT_ROUND_TYPE__INTERVAL = 0, 25762306a36Sopenharmony_ci PERF_STAT_ROUND_TYPE__FINAL = 1, 25862306a36Sopenharmony_ci}; 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_civoid perf_event__print_totals(void); 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_cistruct perf_cpu_map; 26362306a36Sopenharmony_cistruct perf_record_stat_config; 26462306a36Sopenharmony_cistruct perf_stat_config; 26562306a36Sopenharmony_cistruct perf_tool; 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_civoid perf_event__read_stat_config(struct perf_stat_config *config, 26862306a36Sopenharmony_ci struct perf_record_stat_config *event); 26962306a36Sopenharmony_ci 27062306a36Sopenharmony_ciint perf_event__process_comm(struct perf_tool *tool, 27162306a36Sopenharmony_ci union perf_event *event, 27262306a36Sopenharmony_ci struct perf_sample *sample, 27362306a36Sopenharmony_ci struct machine *machine); 27462306a36Sopenharmony_ciint perf_event__process_lost(struct perf_tool *tool, 27562306a36Sopenharmony_ci union perf_event *event, 27662306a36Sopenharmony_ci struct perf_sample *sample, 27762306a36Sopenharmony_ci struct machine *machine); 27862306a36Sopenharmony_ciint perf_event__process_lost_samples(struct perf_tool *tool, 27962306a36Sopenharmony_ci union perf_event *event, 28062306a36Sopenharmony_ci struct perf_sample *sample, 28162306a36Sopenharmony_ci struct machine *machine); 28262306a36Sopenharmony_ciint perf_event__process_aux(struct perf_tool *tool, 28362306a36Sopenharmony_ci union perf_event *event, 28462306a36Sopenharmony_ci struct perf_sample *sample, 28562306a36Sopenharmony_ci struct machine *machine); 28662306a36Sopenharmony_ciint perf_event__process_itrace_start(struct perf_tool *tool, 28762306a36Sopenharmony_ci union perf_event *event, 28862306a36Sopenharmony_ci struct perf_sample *sample, 28962306a36Sopenharmony_ci struct machine *machine); 29062306a36Sopenharmony_ciint perf_event__process_aux_output_hw_id(struct perf_tool *tool, 29162306a36Sopenharmony_ci union perf_event *event, 29262306a36Sopenharmony_ci struct perf_sample *sample, 29362306a36Sopenharmony_ci struct machine *machine); 29462306a36Sopenharmony_ciint perf_event__process_switch(struct perf_tool *tool, 29562306a36Sopenharmony_ci union perf_event *event, 29662306a36Sopenharmony_ci struct perf_sample *sample, 29762306a36Sopenharmony_ci struct machine *machine); 29862306a36Sopenharmony_ciint perf_event__process_namespaces(struct perf_tool *tool, 29962306a36Sopenharmony_ci union perf_event *event, 30062306a36Sopenharmony_ci struct perf_sample *sample, 30162306a36Sopenharmony_ci struct machine *machine); 30262306a36Sopenharmony_ciint perf_event__process_cgroup(struct perf_tool *tool, 30362306a36Sopenharmony_ci union perf_event *event, 30462306a36Sopenharmony_ci struct perf_sample *sample, 30562306a36Sopenharmony_ci struct machine *machine); 30662306a36Sopenharmony_ciint perf_event__process_mmap(struct perf_tool *tool, 30762306a36Sopenharmony_ci union perf_event *event, 30862306a36Sopenharmony_ci struct perf_sample *sample, 30962306a36Sopenharmony_ci struct machine *machine); 31062306a36Sopenharmony_ciint perf_event__process_mmap2(struct perf_tool *tool, 31162306a36Sopenharmony_ci union perf_event *event, 31262306a36Sopenharmony_ci struct perf_sample *sample, 31362306a36Sopenharmony_ci struct machine *machine); 31462306a36Sopenharmony_ciint perf_event__process_fork(struct perf_tool *tool, 31562306a36Sopenharmony_ci union perf_event *event, 31662306a36Sopenharmony_ci struct perf_sample *sample, 31762306a36Sopenharmony_ci struct machine *machine); 31862306a36Sopenharmony_ciint perf_event__process_exit(struct perf_tool *tool, 31962306a36Sopenharmony_ci union perf_event *event, 32062306a36Sopenharmony_ci struct perf_sample *sample, 32162306a36Sopenharmony_ci struct machine *machine); 32262306a36Sopenharmony_ciint perf_event__process_ksymbol(struct perf_tool *tool, 32362306a36Sopenharmony_ci union perf_event *event, 32462306a36Sopenharmony_ci struct perf_sample *sample, 32562306a36Sopenharmony_ci struct machine *machine); 32662306a36Sopenharmony_ciint perf_event__process_bpf(struct perf_tool *tool, 32762306a36Sopenharmony_ci union perf_event *event, 32862306a36Sopenharmony_ci struct perf_sample *sample, 32962306a36Sopenharmony_ci struct machine *machine); 33062306a36Sopenharmony_ciint perf_event__process_text_poke(struct perf_tool *tool, 33162306a36Sopenharmony_ci union perf_event *event, 33262306a36Sopenharmony_ci struct perf_sample *sample, 33362306a36Sopenharmony_ci struct machine *machine); 33462306a36Sopenharmony_ciint perf_event__process(struct perf_tool *tool, 33562306a36Sopenharmony_ci union perf_event *event, 33662306a36Sopenharmony_ci struct perf_sample *sample, 33762306a36Sopenharmony_ci struct machine *machine); 33862306a36Sopenharmony_ci 33962306a36Sopenharmony_cibool is_bts_event(struct perf_event_attr *attr); 34062306a36Sopenharmony_cibool sample_addr_correlates_sym(struct perf_event_attr *attr); 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ciconst char *perf_event__name(unsigned int id); 34362306a36Sopenharmony_ci 34462306a36Sopenharmony_cisize_t perf_event__fprintf_comm(union perf_event *event, FILE *fp); 34562306a36Sopenharmony_cisize_t perf_event__fprintf_mmap(union perf_event *event, FILE *fp); 34662306a36Sopenharmony_cisize_t perf_event__fprintf_mmap2(union perf_event *event, FILE *fp); 34762306a36Sopenharmony_cisize_t perf_event__fprintf_task(union perf_event *event, FILE *fp); 34862306a36Sopenharmony_cisize_t perf_event__fprintf_aux(union perf_event *event, FILE *fp); 34962306a36Sopenharmony_cisize_t perf_event__fprintf_itrace_start(union perf_event *event, FILE *fp); 35062306a36Sopenharmony_cisize_t perf_event__fprintf_aux_output_hw_id(union perf_event *event, FILE *fp); 35162306a36Sopenharmony_cisize_t perf_event__fprintf_switch(union perf_event *event, FILE *fp); 35262306a36Sopenharmony_cisize_t perf_event__fprintf_thread_map(union perf_event *event, FILE *fp); 35362306a36Sopenharmony_cisize_t perf_event__fprintf_cpu_map(union perf_event *event, FILE *fp); 35462306a36Sopenharmony_cisize_t perf_event__fprintf_namespaces(union perf_event *event, FILE *fp); 35562306a36Sopenharmony_cisize_t perf_event__fprintf_cgroup(union perf_event *event, FILE *fp); 35662306a36Sopenharmony_cisize_t perf_event__fprintf_ksymbol(union perf_event *event, FILE *fp); 35762306a36Sopenharmony_cisize_t perf_event__fprintf_bpf(union perf_event *event, FILE *fp); 35862306a36Sopenharmony_cisize_t perf_event__fprintf_text_poke(union perf_event *event, struct machine *machine,FILE *fp); 35962306a36Sopenharmony_cisize_t perf_event__fprintf(union perf_event *event, struct machine *machine, FILE *fp); 36062306a36Sopenharmony_ci 36162306a36Sopenharmony_ciint kallsyms__get_function_start(const char *kallsyms_filename, 36262306a36Sopenharmony_ci const char *symbol_name, u64 *addr); 36362306a36Sopenharmony_ciint kallsyms__get_symbol_start(const char *kallsyms_filename, 36462306a36Sopenharmony_ci const char *symbol_name, u64 *addr); 36562306a36Sopenharmony_ci 36662306a36Sopenharmony_civoid event_attr_init(struct perf_event_attr *attr); 36762306a36Sopenharmony_ci 36862306a36Sopenharmony_ciint perf_event_paranoid(void); 36962306a36Sopenharmony_cibool perf_event_paranoid_check(int max_level); 37062306a36Sopenharmony_ci 37162306a36Sopenharmony_ciextern int sysctl_perf_event_max_stack; 37262306a36Sopenharmony_ciextern int sysctl_perf_event_max_contexts_per_stack; 37362306a36Sopenharmony_ciextern unsigned int proc_map_timeout; 37462306a36Sopenharmony_ci 37562306a36Sopenharmony_ci#define PAGE_SIZE_NAME_LEN 32 37662306a36Sopenharmony_cichar *get_page_size_name(u64 size, char *str); 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_civoid arch_perf_parse_sample_weight(struct perf_sample *data, const __u64 *array, u64 type); 37962306a36Sopenharmony_civoid arch_perf_synthesize_sample_weight(const struct perf_sample *data, __u64 *array, u64 type); 38062306a36Sopenharmony_ciconst char *arch_perf_header_entry(const char *se_header); 38162306a36Sopenharmony_ciint arch_support_sort_key(const char *sort_key); 38262306a36Sopenharmony_ci 38362306a36Sopenharmony_cistatic inline bool perf_event_header__cpumode_is_guest(u8 cpumode) 38462306a36Sopenharmony_ci{ 38562306a36Sopenharmony_ci return cpumode == PERF_RECORD_MISC_GUEST_KERNEL || 38662306a36Sopenharmony_ci cpumode == PERF_RECORD_MISC_GUEST_USER; 38762306a36Sopenharmony_ci} 38862306a36Sopenharmony_ci 38962306a36Sopenharmony_cistatic inline bool perf_event_header__misc_is_guest(u16 misc) 39062306a36Sopenharmony_ci{ 39162306a36Sopenharmony_ci return perf_event_header__cpumode_is_guest(misc & PERF_RECORD_MISC_CPUMODE_MASK); 39262306a36Sopenharmony_ci} 39362306a36Sopenharmony_ci 39462306a36Sopenharmony_cistatic inline bool perf_event_header__is_guest(const struct perf_event_header *header) 39562306a36Sopenharmony_ci{ 39662306a36Sopenharmony_ci return perf_event_header__misc_is_guest(header->misc); 39762306a36Sopenharmony_ci} 39862306a36Sopenharmony_ci 39962306a36Sopenharmony_cistatic inline bool perf_event__is_guest(const union perf_event *event) 40062306a36Sopenharmony_ci{ 40162306a36Sopenharmony_ci return perf_event_header__is_guest(&event->header); 40262306a36Sopenharmony_ci} 40362306a36Sopenharmony_ci 40462306a36Sopenharmony_ci#endif /* __PERF_RECORD_H */ 405