From b22da3d8526a935aa31e086e63f60ff3246cb61c Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Sat, 09 Dec 2023 07:24:11 +0000 Subject: [PATCH] add stmac read mac form eeprom --- kernel/tools/perf/util/branch.h | 71 +++++++++++++++++++++++++++++++++-- 1 files changed, 67 insertions(+), 4 deletions(-) diff --git a/kernel/tools/perf/util/branch.h b/kernel/tools/perf/util/branch.h index 1e3c7c5..17b2ccc 100644 --- a/kernel/tools/perf/util/branch.h +++ b/kernel/tools/perf/util/branch.h @@ -1,8 +1,73 @@ #ifndef _PERF_BRANCH_H #define _PERF_BRANCH_H 1 - +/* + * The linux/stddef.h isn't need here, but is needed for __always_inline used + * in files included from uapi/linux/perf_event.h such as + * /usr/include/linux/swab.h and /usr/include/linux/byteorder/little_endian.h, + * detected in at least musl libc, used in Alpine Linux. -acme + */ +#include <stdio.h> #include <stdint.h> -#include "../perf.h" +#include <linux/compiler.h> +#include <linux/stddef.h> +#include <linux/perf_event.h> +#include <linux/types.h> +#include "event.h" + +struct branch_flags { + union { + u64 value; + struct { + u64 mispred:1; + u64 predicted:1; + u64 in_tx:1; + u64 abort:1; + u64 cycles:16; + u64 type:4; + u64 reserved:40; + }; + }; +}; + +struct branch_info { + struct addr_map_symbol from; + struct addr_map_symbol to; + struct branch_flags flags; + char *srcline_from; + char *srcline_to; +}; + +struct branch_entry { + u64 from; + u64 to; + struct branch_flags flags; +}; + +struct branch_stack { + u64 nr; + u64 hw_idx; + struct branch_entry entries[]; +}; + +/* + * The hw_idx is only available when PERF_SAMPLE_BRANCH_HW_INDEX is applied. + * Otherwise, the output format of a sample with branch stack is + * struct branch_stack { + * u64 nr; + * struct branch_entry entries[0]; + * } + * Check whether the hw_idx is available, + * and return the corresponding pointer of entries[0]. + */ +static inline struct branch_entry *perf_sample__branch_entries(struct perf_sample *sample) +{ + u64 *entry = (u64 *)sample->branch_stack; + + entry++; + if (sample->no_hw_idx) + return (struct branch_entry *)entry; + return (struct branch_entry *)(++entry); +} struct branch_type_stat { bool branch_to; @@ -12,8 +77,6 @@ u64 cross_4k; u64 cross_2m; }; - -struct branch_flags; void branch_type_count(struct branch_type_stat *st, struct branch_flags *flags, u64 from, u64 to); -- Gitblit v1.6.2