~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/tools/perf/util/header.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef __PERF_HEADER_H
  3 #define __PERF_HEADER_H
  4 
  5 #include <linux/stddef.h>
  6 #include <linux/perf_event.h>
  7 #include <sys/types.h>
  8 #include <stdio.h> // FILE
  9 #include <stdbool.h>
 10 #include <linux/bitmap.h>
 11 #include <linux/types.h>
 12 #include "env.h"
 13 #include "pmu.h"
 14 
 15 enum {
 16         HEADER_RESERVED         = 0,    /* always cleared */
 17         HEADER_FIRST_FEATURE    = 1,
 18         HEADER_TRACING_DATA     = 1,
 19         HEADER_BUILD_ID,
 20 
 21         HEADER_HOSTNAME,
 22         HEADER_OSRELEASE,
 23         HEADER_VERSION,
 24         HEADER_ARCH,
 25         HEADER_NRCPUS,
 26         HEADER_CPUDESC,
 27         HEADER_CPUID,
 28         HEADER_TOTAL_MEM,
 29         HEADER_CMDLINE,
 30         HEADER_EVENT_DESC,
 31         HEADER_CPU_TOPOLOGY,
 32         HEADER_NUMA_TOPOLOGY,
 33         HEADER_BRANCH_STACK,
 34         HEADER_PMU_MAPPINGS,
 35         HEADER_GROUP_DESC,
 36         HEADER_AUXTRACE,
 37         HEADER_STAT,
 38         HEADER_CACHE,
 39         HEADER_SAMPLE_TIME,
 40         HEADER_MEM_TOPOLOGY,
 41         HEADER_CLOCKID,
 42         HEADER_DIR_FORMAT,
 43         HEADER_BPF_PROG_INFO,
 44         HEADER_BPF_BTF,
 45         HEADER_COMPRESSED,
 46         HEADER_CPU_PMU_CAPS,
 47         HEADER_CLOCK_DATA,
 48         HEADER_HYBRID_TOPOLOGY,
 49         HEADER_PMU_CAPS,
 50         HEADER_LAST_FEATURE,
 51         HEADER_FEAT_BITS        = 256,
 52 };
 53 
 54 enum perf_header_version {
 55         PERF_HEADER_VERSION_1,
 56         PERF_HEADER_VERSION_2,
 57 };
 58 
 59 struct perf_file_section {
 60         u64 offset;
 61         u64 size;
 62 };
 63 
 64 struct perf_file_header {
 65         u64                             magic;
 66         u64                             size;
 67         u64                             attr_size;
 68         struct perf_file_section        attrs;
 69         struct perf_file_section        data;
 70         /* event_types is ignored */
 71         struct perf_file_section        event_types;
 72         DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
 73 };
 74 
 75 struct perf_pipe_file_header {
 76         u64                             magic;
 77         u64                             size;
 78 };
 79 
 80 struct perf_header;
 81 
 82 int perf_file_header__read(struct perf_file_header *header,
 83                            struct perf_header *ph, int fd);
 84 
 85 struct perf_header {
 86         enum perf_header_version        version;
 87         bool                            needs_swap;
 88         u64                             data_offset;
 89         u64                             data_size;
 90         u64                             feat_offset;
 91         DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
 92         struct perf_env         env;
 93 };
 94 
 95 struct feat_fd {
 96         struct perf_header *ph;
 97         int                fd;
 98         void               *buf;        /* Either buf != NULL or fd >= 0 */
 99         ssize_t            offset;
100         size_t             size;
101         struct evsel       *events;
102 };
103 
104 struct perf_header_feature_ops {
105         int        (*write)(struct feat_fd *ff, struct evlist *evlist);
106         void       (*print)(struct feat_fd *ff, FILE *fp);
107         int        (*process)(struct feat_fd *ff, void *data);
108         const char *name;
109         bool       full_only;
110         bool       synthesize;
111 };
112 
113 struct evlist;
114 struct perf_session;
115 struct perf_tool;
116 union perf_event;
117 
118 extern const char perf_version_string[];
119 
120 int perf_session__read_header(struct perf_session *session, int repipe_fd);
121 int perf_session__write_header(struct perf_session *session,
122                                struct evlist *evlist,
123                                int fd, bool at_exit);
124 int perf_header__write_pipe(int fd);
125 
126 /* feat_writer writes a feature section to output */
127 struct feat_writer {
128         int (*write)(struct feat_writer *fw, void *buf, size_t sz);
129 };
130 
131 /* feat_copier copies a feature section using feat_writer to output */
132 struct feat_copier {
133         int (*copy)(struct feat_copier *fc, int feat, struct feat_writer *fw);
134 };
135 
136 int perf_session__inject_header(struct perf_session *session,
137                                 struct evlist *evlist,
138                                 int fd,
139                                 struct feat_copier *fc);
140 
141 size_t perf_session__data_offset(const struct evlist *evlist);
142 
143 void perf_header__set_feat(struct perf_header *header, int feat);
144 void perf_header__clear_feat(struct perf_header *header, int feat);
145 bool perf_header__has_feat(const struct perf_header *header, int feat);
146 
147 int perf_header__set_cmdline(int argc, const char **argv);
148 
149 int perf_header__process_sections(struct perf_header *header, int fd,
150                                   void *data,
151                                   int (*process)(struct perf_file_section *section,
152                                   struct perf_header *ph,
153                                   int feat, int fd, void *data));
154 
155 int perf_header__fprintf_info(struct perf_session *s, FILE *fp, bool full);
156 
157 int perf_event__process_feature(struct perf_session *session,
158                                 union perf_event *event);
159 int perf_event__process_attr(struct perf_tool *tool, union perf_event *event,
160                              struct evlist **pevlist);
161 int perf_event__process_event_update(struct perf_tool *tool,
162                                      union perf_event *event,
163                                      struct evlist **pevlist);
164 size_t perf_event__fprintf_event_update(union perf_event *event, FILE *fp);
165 #ifdef HAVE_LIBTRACEEVENT
166 int perf_event__process_tracing_data(struct perf_session *session,
167                                      union perf_event *event);
168 #endif
169 int perf_event__process_build_id(struct perf_session *session,
170                                  union perf_event *event);
171 bool is_perf_magic(u64 magic);
172 
173 #define NAME_ALIGN 64
174 
175 struct feat_fd;
176 
177 int do_write(struct feat_fd *fd, const void *buf, size_t size);
178 
179 int write_padded(struct feat_fd *fd, const void *bf,
180                  size_t count, size_t count_aligned);
181 
182 #define MAX_CACHE_LVL 4
183 
184 int is_cpu_online(unsigned int cpu);
185 int build_caches_for_cpu(u32 cpu, struct cpu_cache_level caches[], u32 *cntp);
186 
187 /*
188  * arch specific callback
189  */
190 int get_cpuid(char *buffer, size_t sz);
191 
192 char *get_cpuid_str(struct perf_pmu *pmu __maybe_unused);
193 int strcmp_cpuid_str(const char *s1, const char *s2);
194 #endif /* __PERF_HEADER_H */
195 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php