Lines Matching full:ff

102 static int __do_write_fd(struct feat_fd *ff, const void *buf, size_t size)  in __do_write_fd()  argument
104 ssize_t ret = writen(ff->fd, buf, size); in __do_write_fd()
111 static int __do_write_buf(struct feat_fd *ff, const void *buf, size_t size) in __do_write_buf() argument
115 size_t new_size = ff->size; in __do_write_buf()
118 if (size + ff->offset > max_size) in __do_write_buf()
121 while (size > (new_size - ff->offset)) in __do_write_buf()
125 if (ff->size < new_size) { in __do_write_buf()
126 addr = realloc(ff->buf, new_size); in __do_write_buf()
129 ff->buf = addr; in __do_write_buf()
130 ff->size = new_size; in __do_write_buf()
133 memcpy(ff->buf + ff->offset, buf, size); in __do_write_buf()
134 ff->offset += size; in __do_write_buf()
140 int do_write(struct feat_fd *ff, const void *buf, size_t size) in do_write() argument
142 if (!ff->buf) in do_write()
143 return __do_write_fd(ff, buf, size); in do_write()
144 return __do_write_buf(ff, buf, size); in do_write()
148 static int do_write_bitmap(struct feat_fd *ff, unsigned long *set, u64 size) in do_write_bitmap() argument
153 ret = do_write(ff, &size, sizeof(size)); in do_write_bitmap()
158 ret = do_write(ff, p + i, sizeof(*p)); in do_write_bitmap()
167 int write_padded(struct feat_fd *ff, const void *bf, in write_padded() argument
171 int err = do_write(ff, bf, count); in write_padded()
174 err = do_write(ff, zero_buf, count_aligned - count); in write_padded()
183 static int do_write_string(struct feat_fd *ff, const char *str) in do_write_string() argument
192 ret = do_write(ff, &len, sizeof(len)); in do_write_string()
196 return write_padded(ff, str, olen, len); in do_write_string()
199 static int __do_read_fd(struct feat_fd *ff, void *addr, ssize_t size) in __do_read_fd() argument
201 ssize_t ret = readn(ff->fd, addr, size); in __do_read_fd()
208 static int __do_read_buf(struct feat_fd *ff, void *addr, ssize_t size) in __do_read_buf() argument
210 if (size > (ssize_t)ff->size - ff->offset) in __do_read_buf()
213 memcpy(addr, ff->buf + ff->offset, size); in __do_read_buf()
214 ff->offset += size; in __do_read_buf()
220 static int __do_read(struct feat_fd *ff, void *addr, ssize_t size) in __do_read() argument
222 if (!ff->buf) in __do_read()
223 return __do_read_fd(ff, addr, size); in __do_read()
224 return __do_read_buf(ff, addr, size); in __do_read()
227 static int do_read_u32(struct feat_fd *ff, u32 *addr) in do_read_u32() argument
231 ret = __do_read(ff, addr, sizeof(*addr)); in do_read_u32()
235 if (ff->ph->needs_swap) in do_read_u32()
240 static int do_read_u64(struct feat_fd *ff, u64 *addr) in do_read_u64() argument
244 ret = __do_read(ff, addr, sizeof(*addr)); in do_read_u64()
248 if (ff->ph->needs_swap) in do_read_u64()
253 static char *do_read_string(struct feat_fd *ff) in do_read_string() argument
258 if (do_read_u32(ff, &len)) in do_read_string()
265 if (!__do_read(ff, buf, len)) { in do_read_string()
279 static int do_read_bitmap(struct feat_fd *ff, unsigned long **pset, u64 *psize) in do_read_bitmap() argument
285 ret = do_read_u64(ff, &size); in do_read_bitmap()
296 ret = do_read_u64(ff, p + i); in do_read_bitmap()
309 static int write_tracing_data(struct feat_fd *ff, in write_tracing_data() argument
312 if (WARN(ff->buf, "Error: calling %s in pipe-mode.\n", __func__)) in write_tracing_data()
315 return read_tracing_data(ff->fd, &evlist->core.entries); in write_tracing_data()
319 static int write_build_id(struct feat_fd *ff, in write_build_id() argument
325 session = container_of(ff->ph, struct perf_session, header); in write_build_id()
330 if (WARN(ff->buf, "Error: calling %s in pipe-mode.\n", __func__)) in write_build_id()
333 err = perf_session__write_buildid_table(session, ff); in write_build_id()
343 static int write_hostname(struct feat_fd *ff, in write_hostname() argument
353 return do_write_string(ff, uts.nodename); in write_hostname()
356 static int write_osrelease(struct feat_fd *ff, in write_osrelease() argument
366 return do_write_string(ff, uts.release); in write_osrelease()
369 static int write_arch(struct feat_fd *ff, in write_arch() argument
379 return do_write_string(ff, uts.machine); in write_arch()
382 static int write_version(struct feat_fd *ff, in write_version() argument
385 return do_write_string(ff, perf_version_string); in write_version()
388 static int __write_cpudesc(struct feat_fd *ff, const char *cpuinfo_proc) in __write_cpudesc() argument
436 ret = do_write_string(ff, s); in __write_cpudesc()
443 static int write_cpudesc(struct feat_fd *ff, in write_cpudesc() argument
471 ret = __write_cpudesc(ff, cpuinfo_procs[i]); in write_cpudesc()
479 static int write_nrcpus(struct feat_fd *ff, in write_nrcpus() argument
494 ret = do_write(ff, &nrc, sizeof(nrc)); in write_nrcpus()
498 return do_write(ff, &nra, sizeof(nra)); in write_nrcpus()
501 static int write_event_desc(struct feat_fd *ff, in write_event_desc() argument
513 ret = do_write(ff, &nre, sizeof(nre)); in write_event_desc()
521 ret = do_write(ff, &sz, sizeof(sz)); in write_event_desc()
526 ret = do_write(ff, &evsel->core.attr, sz); in write_event_desc()
537 ret = do_write(ff, &nri, sizeof(nri)); in write_event_desc()
544 ret = do_write_string(ff, evsel__name(evsel)); in write_event_desc()
550 ret = do_write(ff, evsel->core.id, evsel->core.ids * sizeof(u64)); in write_event_desc()
557 static int write_cmdline(struct feat_fd *ff, in write_cmdline() argument
560 struct perf_env *env = &ff->ph->env; in write_cmdline()
570 ret = do_write(ff, &n, sizeof(n)); in write_cmdline()
574 ret = do_write_string(ff, buf); in write_cmdline()
579 ret = do_write_string(ff, env->cmdline_argv[i]); in write_cmdline()
587 static int write_cpu_topology(struct feat_fd *ff, in write_cpu_topology() argument
590 struct perf_env *env = &ff->ph->env; in write_cpu_topology()
599 ret = do_write(ff, &tp->package_cpus_lists, sizeof(tp->package_cpus_lists)); in write_cpu_topology()
604 ret = do_write_string(ff, tp->package_cpus_list[i]); in write_cpu_topology()
608 ret = do_write(ff, &tp->core_cpus_lists, sizeof(tp->core_cpus_lists)); in write_cpu_topology()
613 ret = do_write_string(ff, tp->core_cpus_list[i]); in write_cpu_topology()
623 ret = do_write(ff, &env->cpu[j].core_id, in write_cpu_topology()
627 ret = do_write(ff, &env->cpu[j].socket_id, in write_cpu_topology()
636 ret = do_write(ff, &tp->die_cpus_lists, sizeof(tp->die_cpus_lists)); in write_cpu_topology()
641 ret = do_write_string(ff, tp->die_cpus_list[i]); in write_cpu_topology()
647 ret = do_write(ff, &env->cpu[j].die_id, in write_cpu_topology()
660 static int write_total_mem(struct feat_fd *ff, in write_total_mem() argument
681 ret = do_write(ff, &mem, sizeof(mem)); in write_total_mem()
689 static int write_numa_topology(struct feat_fd *ff, in write_numa_topology() argument
700 ret = do_write(ff, &tp->nr, sizeof(u32)); in write_numa_topology()
707 ret = do_write(ff, &n->node, sizeof(u32)); in write_numa_topology()
711 ret = do_write(ff, &n->mem_total, sizeof(u64)); in write_numa_topology()
715 ret = do_write(ff, &n->mem_free, sizeof(u64)); in write_numa_topology()
719 ret = do_write_string(ff, n->cpus); in write_numa_topology()
743 static int write_pmu_mappings(struct feat_fd *ff, in write_pmu_mappings() argument
757 ret = do_write(ff, &pmu_num, sizeof(pmu_num)); in write_pmu_mappings()
762 ret = do_write(ff, &pmu->type, sizeof(pmu->type)); in write_pmu_mappings()
766 ret = do_write_string(ff, pmu->name); in write_pmu_mappings()
786 static int write_group_desc(struct feat_fd *ff, in write_group_desc() argument
793 ret = do_write(ff, &nr_groups, sizeof(nr_groups)); in write_group_desc()
803 ret = do_write_string(ff, name); in write_group_desc()
807 ret = do_write(ff, &leader_idx, sizeof(leader_idx)); in write_group_desc()
811 ret = do_write(ff, &nr_members, sizeof(nr_members)); in write_group_desc()
888 static int write_cpuid(struct feat_fd *ff, struct evlist *evlist) in write_cpuid() argument
898 return do_write_string(ff, buffer); in write_cpuid()
901 static int write_branch_stack(struct feat_fd *ff __maybe_unused, in write_branch_stack()
907 static int write_auxtrace(struct feat_fd *ff, in write_auxtrace() argument
913 if (WARN(ff->buf, "Error: calling %s in pipe-mode.\n", __func__)) in write_auxtrace()
916 session = container_of(ff->ph, struct perf_session, header); in write_auxtrace()
918 err = auxtrace_index__write(ff->fd, &session->auxtrace_index); in write_auxtrace()
924 static int write_clockid(struct feat_fd *ff, in write_clockid() argument
927 return do_write(ff, &ff->ph->env.clock.clockid_res_ns, in write_clockid()
928 sizeof(ff->ph->env.clock.clockid_res_ns)); in write_clockid()
931 static int write_clock_data(struct feat_fd *ff, in write_clock_data() argument
941 ret = do_write(ff, &data32, sizeof(data32)); in write_clock_data()
946 data32 = ff->ph->env.clock.clockid; in write_clock_data()
948 ret = do_write(ff, &data32, sizeof(data32)); in write_clock_data()
953 data64 = &ff->ph->env.clock.tod_ns; in write_clock_data()
955 ret = do_write(ff, data64, sizeof(*data64)); in write_clock_data()
960 data64 = &ff->ph->env.clock.clockid_ns; in write_clock_data()
962 return do_write(ff, data64, sizeof(*data64)); in write_clock_data()
965 static int write_hybrid_topology(struct feat_fd *ff, in write_hybrid_topology() argument
976 ret = do_write(ff, &tp->nr, sizeof(u32)); in write_hybrid_topology()
983 ret = do_write_string(ff, n->pmu_name); in write_hybrid_topology()
987 ret = do_write_string(ff, n->cpus); in write_hybrid_topology()
999 static int write_dir_format(struct feat_fd *ff, in write_dir_format() argument
1005 session = container_of(ff->ph, struct perf_session, header); in write_dir_format()
1011 return do_write(ff, &data->dir.version, sizeof(data->dir.version)); in write_dir_format()
1015 static int write_bpf_prog_info(struct feat_fd *ff, in write_bpf_prog_info() argument
1018 struct perf_env *env = &ff->ph->env; in write_bpf_prog_info()
1028 ret = do_write(ff, &env->bpf_progs.infos_cnt, in write_bpf_prog_info()
1046 ret = do_write(ff, node->info_linear, len); in write_bpf_prog_info()
1060 static int write_bpf_btf(struct feat_fd *ff, in write_bpf_btf() argument
1063 struct perf_env *env = &ff->ph->env; in write_bpf_btf()
1073 ret = do_write(ff, &env->bpf_progs.btfs_cnt, in write_bpf_btf()
1086 ret = do_write(ff, &node->id, in write_bpf_btf()
1245 static int write_cache(struct feat_fd *ff, in write_cache() argument
1259 ret = do_write(ff, &version, sizeof(u32)); in write_cache()
1263 ret = do_write(ff, &cnt, sizeof(u32)); in write_cache()
1271 ret = do_write(ff, &c->v, sizeof(u32)); \ in write_cache()
1282 ret = do_write_string(ff, (const char *) c->v); \ in write_cache()
1298 static int write_stat(struct feat_fd *ff __maybe_unused, in write_stat()
1304 static int write_sample_time(struct feat_fd *ff, in write_sample_time() argument
1309 ret = do_write(ff, &evlist->first_sample_time, in write_sample_time()
1314 return do_write(ff, &evlist->last_sample_time, in write_sample_time()
1457 static int write_mem_topology(struct feat_fd *ff __maybe_unused, in write_mem_topology()
1473 ret = do_write(ff, &version, sizeof(version)); in write_mem_topology()
1477 ret = do_write(ff, &bsize, sizeof(bsize)); in write_mem_topology()
1481 ret = do_write(ff, &nr, sizeof(nr)); in write_mem_topology()
1489 ret = do_write(ff, &n->v, sizeof(n->v)); \ in write_mem_topology()
1498 ret = do_write_bitmap(ff, n->set, n->size); in write_mem_topology()
1508 static int write_compressed(struct feat_fd *ff __maybe_unused, in write_compressed()
1513 ret = do_write(ff, &(ff->ph->env.comp_ver), sizeof(ff->ph->env.comp_ver)); in write_compressed()
1517 ret = do_write(ff, &(ff->ph->env.comp_type), sizeof(ff->ph->env.comp_type)); in write_compressed()
1521 ret = do_write(ff, &(ff->ph->env.comp_level), sizeof(ff->ph->env.comp_level)); in write_compressed()
1525 ret = do_write(ff, &(ff->ph->env.comp_ratio), sizeof(ff->ph->env.comp_ratio)); in write_compressed()
1529 return do_write(ff, &(ff->ph->env.comp_mmap_len), sizeof(ff->ph->env.comp_mmap_len)); in write_compressed()
1532 static int __write_pmu_caps(struct feat_fd *ff, struct perf_pmu *pmu, in __write_pmu_caps() argument
1538 ret = do_write(ff, &pmu->nr_caps, sizeof(pmu->nr_caps)); in __write_pmu_caps()
1543 ret = do_write_string(ff, caps->name); in __write_pmu_caps()
1547 ret = do_write_string(ff, caps->value); in __write_pmu_caps()
1553 ret = do_write_string(ff, pmu->name); in __write_pmu_caps()
1561 static int write_cpu_pmu_caps(struct feat_fd *ff, in write_cpu_pmu_caps() argument
1574 return __write_pmu_caps(ff, cpu_pmu, false); in write_cpu_pmu_caps()
1577 static int write_pmu_caps(struct feat_fd *ff, in write_pmu_caps() argument
1598 ret = do_write(ff, &nr_pmu, sizeof(nr_pmu)); in write_pmu_caps()
1617 ret = __write_pmu_caps(ff, pmu, true); in write_pmu_caps()
1624 static void print_hostname(struct feat_fd *ff, FILE *fp) in print_hostname() argument
1626 fprintf(fp, "# hostname : %s\n", ff->ph->env.hostname); in print_hostname()
1629 static void print_osrelease(struct feat_fd *ff, FILE *fp) in print_osrelease() argument
1631 fprintf(fp, "# os release : %s\n", ff->ph->env.os_release); in print_osrelease()
1634 static void print_arch(struct feat_fd *ff, FILE *fp) in print_arch() argument
1636 fprintf(fp, "# arch : %s\n", ff->ph->env.arch); in print_arch()
1639 static void print_cpudesc(struct feat_fd *ff, FILE *fp) in print_cpudesc() argument
1641 fprintf(fp, "# cpudesc : %s\n", ff->ph->env.cpu_desc); in print_cpudesc()
1644 static void print_nrcpus(struct feat_fd *ff, FILE *fp) in print_nrcpus() argument
1646 fprintf(fp, "# nrcpus online : %u\n", ff->ph->env.nr_cpus_online); in print_nrcpus()
1647 fprintf(fp, "# nrcpus avail : %u\n", ff->ph->env.nr_cpus_avail); in print_nrcpus()
1650 static void print_version(struct feat_fd *ff, FILE *fp) in print_version() argument
1652 fprintf(fp, "# perf version : %s\n", ff->ph->env.version); in print_version()
1655 static void print_cmdline(struct feat_fd *ff, FILE *fp) in print_cmdline() argument
1659 nr = ff->ph->env.nr_cmdline; in print_cmdline()
1664 char *argv_i = strdup(ff->ph->env.cmdline_argv[i]); in print_cmdline()
1666 fprintf(fp, "%s ", ff->ph->env.cmdline_argv[i]); in print_cmdline()
1684 static void print_cpu_topology(struct feat_fd *ff, FILE *fp) in print_cpu_topology() argument
1686 struct perf_header *ph = ff->ph; in print_cpu_topology()
1741 static void print_clockid(struct feat_fd *ff, FILE *fp) in print_clockid() argument
1744 ff->ph->env.clock.clockid_res_ns * 1000); in print_clockid()
1747 static void print_clock_data(struct feat_fd *ff, FILE *fp) in print_clock_data() argument
1756 if (!ff->ph->env.clock.enabled) { in print_clock_data()
1762 ref = ff->ph->env.clock.tod_ns; in print_clock_data()
1768 ref = ff->ph->env.clock.clockid_ns; in print_clock_data()
1773 clockid = ff->ph->env.clock.clockid; in print_clock_data()
1790 static void print_hybrid_topology(struct feat_fd *ff, FILE *fp) in print_hybrid_topology() argument
1796 for (i = 0; i < ff->ph->env.nr_hybrid_nodes; i++) { in print_hybrid_topology()
1797 n = &ff->ph->env.hybrid_nodes[i]; in print_hybrid_topology()
1802 static void print_dir_format(struct feat_fd *ff, FILE *fp) in print_dir_format() argument
1807 session = container_of(ff->ph, struct perf_session, header); in print_dir_format()
1814 static void print_bpf_prog_info(struct feat_fd *ff, FILE *fp) in print_bpf_prog_info() argument
1816 struct perf_env *env = &ff->ph->env; in print_bpf_prog_info()
1841 static void print_bpf_btf(struct feat_fd *ff, FILE *fp) in print_bpf_btf() argument
1843 struct perf_env *env = &ff->ph->env; in print_bpf_btf()
1916 static struct evsel *read_event_desc(struct feat_fd *ff) in read_event_desc() argument
1925 if (do_read_u32(ff, &nre)) in read_event_desc()
1928 if (do_read_u32(ff, &sz)) in read_event_desc()
1952 if (__do_read(ff, buf, sz)) in read_event_desc()
1955 if (ff->ph->needs_swap) in read_event_desc()
1963 if (do_read_u32(ff, &nr)) in read_event_desc()
1966 if (ff->ph->needs_swap) in read_event_desc()
1969 evsel->name = do_read_string(ff); in read_event_desc()
1983 if (do_read_u64(ff, id)) in read_event_desc()
2003 static void print_event_desc(struct feat_fd *ff, FILE *fp) in print_event_desc() argument
2009 if (ff->events) in print_event_desc()
2010 events = ff->events; in print_event_desc()
2012 events = read_event_desc(ff); in print_event_desc()
2038 ff->events = NULL; in print_event_desc()
2041 static void print_total_mem(struct feat_fd *ff, FILE *fp) in print_total_mem() argument
2043 fprintf(fp, "# total memory : %llu kB\n", ff->ph->env.total_mem); in print_total_mem()
2046 static void print_numa_topology(struct feat_fd *ff, FILE *fp) in print_numa_topology() argument
2051 for (i = 0; i < ff->ph->env.nr_numa_nodes; i++) { in print_numa_topology()
2052 n = &ff->ph->env.numa_nodes[i]; in print_numa_topology()
2063 static void print_cpuid(struct feat_fd *ff, FILE *fp) in print_cpuid() argument
2065 fprintf(fp, "# cpuid : %s\n", ff->ph->env.cpuid); in print_cpuid()
2068 static void print_branch_stack(struct feat_fd *ff __maybe_unused, FILE *fp) in print_branch_stack()
2073 static void print_auxtrace(struct feat_fd *ff __maybe_unused, FILE *fp) in print_auxtrace()
2078 static void print_stat(struct feat_fd *ff __maybe_unused, FILE *fp) in print_stat()
2083 static void print_cache(struct feat_fd *ff, FILE *fp __maybe_unused) in print_cache() argument
2088 for (i = 0; i < ff->ph->env.caches_cnt; i++) { in print_cache()
2090 cpu_cache_level__fprintf(fp, &ff->ph->env.caches[i]); in print_cache()
2094 static void print_compressed(struct feat_fd *ff, FILE *fp) in print_compressed() argument
2097 ff->ph->env.comp_type == PERF_COMP_ZSTD ? "Zstd" : "Unknown", in print_compressed()
2098 ff->ph->env.comp_level, ff->ph->env.comp_ratio); in print_compressed()
2120 static void print_cpu_pmu_caps(struct feat_fd *ff, FILE *fp) in print_cpu_pmu_caps() argument
2122 __print_pmu_caps(fp, ff->ph->env.nr_cpu_pmu_caps, in print_cpu_pmu_caps()
2123 ff->ph->env.cpu_pmu_caps, (char *)"cpu"); in print_cpu_pmu_caps()
2126 static void print_pmu_caps(struct feat_fd *ff, FILE *fp) in print_pmu_caps() argument
2128 struct perf_env *env = &ff->ph->env; in print_pmu_caps()
2146 static void print_pmu_mappings(struct feat_fd *ff, FILE *fp) in print_pmu_mappings() argument
2148 struct perf_env *env = &ff->ph->env; in print_pmu_mappings()
2183 static void print_group_desc(struct feat_fd *ff, FILE *fp) in print_group_desc() argument
2189 session = container_of(ff->ph, struct perf_session, header); in print_group_desc()
2205 static void print_sample_time(struct feat_fd *ff, FILE *fp) in print_sample_time() argument
2211 session = container_of(ff->ph, struct perf_session, header); in print_sample_time()
2240 static void print_mem_topology(struct feat_fd *ff, FILE *fp) in print_mem_topology() argument
2242 struct perf_env *env = &ff->ph->env; in print_mem_topology()
2419 static int process_##__feat(struct feat_fd *ff, void *data __maybe_unused) \
2421 free(ff->ph->env.__feat_env); \
2422 ff->ph->env.__feat_env = do_read_string(ff); \
2423 return ff->ph->env.__feat_env ? 0 : -ENOMEM; \
2434 static int process_tracing_data(struct feat_fd *ff, void *data) in process_tracing_data() argument
2436 ssize_t ret = trace_report(ff->fd, data, false); in process_tracing_data()
2442 static int process_build_id(struct feat_fd *ff, void *data __maybe_unused) in process_build_id() argument
2444 if (perf_header__read_build_ids(ff->ph, ff->fd, ff->offset, ff->size)) in process_build_id()
2449 static int process_nrcpus(struct feat_fd *ff, void *data __maybe_unused) in process_nrcpus() argument
2451 struct perf_env *env = &ff->ph->env; in process_nrcpus()
2455 ret = do_read_u32(ff, &nr_cpus_avail); in process_nrcpus()
2459 ret = do_read_u32(ff, &nr_cpus_online); in process_nrcpus()
2467 static int process_total_mem(struct feat_fd *ff, void *data __maybe_unused) in process_total_mem() argument
2469 struct perf_env *env = &ff->ph->env; in process_total_mem()
2473 ret = do_read_u64(ff, &total_mem); in process_total_mem()
2510 process_event_desc(struct feat_fd *ff, void *data __maybe_unused) in process_event_desc() argument
2513 struct evsel *evsel, *events = read_event_desc(ff); in process_event_desc()
2518 session = container_of(ff->ph, struct perf_session, header); in process_event_desc()
2523 ff->events = events; in process_event_desc()
2535 static int process_cmdline(struct feat_fd *ff, void *data __maybe_unused) in process_cmdline() argument
2537 struct perf_env *env = &ff->ph->env; in process_cmdline()
2541 if (do_read_u32(ff, &nr)) in process_cmdline()
2546 cmdline = zalloc(ff->size + nr + 1); in process_cmdline()
2555 str = do_read_string(ff); in process_cmdline()
2574 static int process_cpu_topology(struct feat_fd *ff, void *data __maybe_unused) in process_cpu_topology() argument
2579 struct perf_env *env = &ff->ph->env; in process_cpu_topology()
2587 if (do_read_u32(ff, &nr)) in process_cpu_topology()
2596 str = do_read_string(ff); in process_cpu_topology()
2608 if (do_read_u32(ff, &nr)) in process_cpu_topology()
2615 str = do_read_string(ff); in process_cpu_topology()
2631 if (ff->size <= size) { in process_cpu_topology()
2637 if (do_read_u32(ff, &nr)) in process_cpu_topology()
2643 if (do_read_u32(ff, &nr)) in process_cpu_topology()
2654 if (ff->size <= size) in process_cpu_topology()
2657 if (do_read_u32(ff, &nr)) in process_cpu_topology()
2664 str = do_read_string(ff); in process_cpu_topology()
2677 if (do_read_u32(ff, &nr)) in process_cpu_topology()
2693 static int process_numa_topology(struct feat_fd *ff, void *data __maybe_unused) in process_numa_topology() argument
2695 struct perf_env *env = &ff->ph->env; in process_numa_topology()
2701 if (do_read_u32(ff, &nr)) in process_numa_topology()
2712 if (do_read_u32(ff, &n->node)) in process_numa_topology()
2715 if (do_read_u64(ff, &n->mem_total)) in process_numa_topology()
2718 if (do_read_u64(ff, &n->mem_free)) in process_numa_topology()
2721 str = do_read_string(ff); in process_numa_topology()
2739 static int process_pmu_mappings(struct feat_fd *ff, void *data __maybe_unused) in process_pmu_mappings() argument
2741 struct perf_env *env = &ff->ph->env; in process_pmu_mappings()
2747 if (do_read_u32(ff, &pmu_num)) in process_pmu_mappings()
2760 if (do_read_u32(ff, &type)) in process_pmu_mappings()
2763 name = do_read_string(ff); in process_pmu_mappings()
2789 static int process_group_desc(struct feat_fd *ff, void *data __maybe_unused) in process_group_desc() argument
2791 struct perf_env *env = &ff->ph->env; in process_group_desc()
2802 if (do_read_u32(ff, &nr_groups)) in process_group_desc()
2816 desc[i].name = do_read_string(ff); in process_group_desc()
2820 if (do_read_u32(ff, &desc[i].leader_idx)) in process_group_desc()
2823 if (do_read_u32(ff, &desc[i].nr_members)) in process_group_desc()
2830 session = container_of(ff->ph, struct perf_session, header); in process_group_desc()
2873 static int process_auxtrace(struct feat_fd *ff, void *data __maybe_unused) in process_auxtrace() argument
2878 session = container_of(ff->ph, struct perf_session, header); in process_auxtrace()
2880 err = auxtrace_index__process(ff->fd, ff->size, session, in process_auxtrace()
2881 ff->ph->needs_swap); in process_auxtrace()
2887 static int process_cache(struct feat_fd *ff, void *data __maybe_unused) in process_cache() argument
2889 struct perf_env *env = &ff->ph->env; in process_cache()
2893 if (do_read_u32(ff, &version)) in process_cache()
2899 if (do_read_u32(ff, &cnt)) in process_cache()
2910 if (do_read_u32(ff, &c->v)) \ in process_cache()
2920 c->v = do_read_string(ff); \ in process_cache()
2943 static int process_sample_time(struct feat_fd *ff, void *data __maybe_unused) in process_sample_time() argument
2949 session = container_of(ff->ph, struct perf_session, header); in process_sample_time()
2951 ret = do_read_u64(ff, &first_sample_time); in process_sample_time()
2955 ret = do_read_u64(ff, &last_sample_time); in process_sample_time()
2964 static int process_mem_topology(struct feat_fd *ff, in process_mem_topology() argument
2967 struct perf_env *env = &ff->ph->env; in process_mem_topology()
2972 if (do_read_u64(ff, &version)) in process_mem_topology()
2978 if (do_read_u64(ff, &bsize)) in process_mem_topology()
2981 if (do_read_u64(ff, &nr)) in process_mem_topology()
2992 if (do_read_u64(ff, &n.v)) \ in process_mem_topology()
3000 if (do_read_bitmap(ff, &n.set, &n.size)) in process_mem_topology()
3017 static int process_clockid(struct feat_fd *ff, in process_clockid() argument
3020 struct perf_env *env = &ff->ph->env; in process_clockid()
3022 if (do_read_u64(ff, &env->clock.clockid_res_ns)) in process_clockid()
3028 static int process_clock_data(struct feat_fd *ff, in process_clock_data() argument
3031 struct perf_env *env = &ff->ph->env; in process_clock_data()
3036 if (do_read_u32(ff, &data32)) in process_clock_data()
3043 if (do_read_u32(ff, &data32)) in process_clock_data()
3049 if (do_read_u64(ff, &data64)) in process_clock_data()
3055 if (do_read_u64(ff, &data64)) in process_clock_data()
3063 static int process_hybrid_topology(struct feat_fd *ff, in process_hybrid_topology() argument
3066 struct perf_env *env = &ff->ph->env; in process_hybrid_topology()
3071 if (do_read_u32(ff, &nr)) in process_hybrid_topology()
3081 n->pmu_name = do_read_string(ff); in process_hybrid_topology()
3085 n->cpus = do_read_string(ff); in process_hybrid_topology()
3104 static int process_dir_format(struct feat_fd *ff, in process_dir_format() argument
3110 session = container_of(ff->ph, struct perf_session, header); in process_dir_format()
3116 return do_read_u64(ff, &data->dir.version); in process_dir_format()
3120 static int process_bpf_prog_info(struct feat_fd *ff, void *data __maybe_unused) in process_bpf_prog_info() argument
3123 struct perf_env *env = &ff->ph->env; in process_bpf_prog_info()
3128 if (ff->ph->needs_swap) { in process_bpf_prog_info()
3133 if (do_read_u32(ff, &count)) in process_bpf_prog_info()
3143 if (do_read_u32(ff, &info_len)) in process_bpf_prog_info()
3145 if (do_read_u32(ff, &data_len)) in process_bpf_prog_info()
3159 if (do_read_u64(ff, (u64 *)(&info_linear->arrays))) in process_bpf_prog_info()
3161 if (__do_read(ff, &info_linear->info, info_len)) in process_bpf_prog_info()
3167 if (__do_read(ff, info_linear->data, data_len)) in process_bpf_prog_info()
3193 static int process_bpf_btf(struct feat_fd *ff, void *data __maybe_unused) in process_bpf_btf() argument
3195 struct perf_env *env = &ff->ph->env; in process_bpf_btf()
3200 if (ff->ph->needs_swap) { in process_bpf_btf()
3205 if (do_read_u32(ff, &count)) in process_bpf_btf()
3213 if (do_read_u32(ff, &id)) in process_bpf_btf()
3215 if (do_read_u32(ff, &data_size)) in process_bpf_btf()
3225 if (__do_read(ff, node->data, data_size)) in process_bpf_btf()
3241 static int process_compressed(struct feat_fd *ff, in process_compressed() argument
3244 struct perf_env *env = &ff->ph->env; in process_compressed()
3246 if (do_read_u32(ff, &(env->comp_ver))) in process_compressed()
3249 if (do_read_u32(ff, &(env->comp_type))) in process_compressed()
3252 if (do_read_u32(ff, &(env->comp_level))) in process_compressed()
3255 if (do_read_u32(ff, &(env->comp_ratio))) in process_compressed()
3258 if (do_read_u32(ff, &(env->comp_mmap_len))) in process_compressed()
3264 static int __process_pmu_caps(struct feat_fd *ff, int *nr_caps, in __process_pmu_caps() argument
3275 if (do_read_u32(ff, &nr_pmu_caps)) in __process_pmu_caps()
3286 name = do_read_string(ff); in __process_pmu_caps()
3290 value = do_read_string(ff); in __process_pmu_caps()
3327 static int process_cpu_pmu_caps(struct feat_fd *ff, in process_cpu_pmu_caps() argument
3330 struct perf_env *env = &ff->ph->env; in process_cpu_pmu_caps()
3331 int ret = __process_pmu_caps(ff, &env->nr_cpu_pmu_caps, in process_cpu_pmu_caps()
3342 static int process_pmu_caps(struct feat_fd *ff, void *data __maybe_unused) in process_pmu_caps() argument
3344 struct perf_env *env = &ff->ph->env; in process_pmu_caps()
3350 if (do_read_u32(ff, &nr_pmu)) in process_pmu_caps()
3363 ret = __process_pmu_caps(ff, &pmu_caps[i].nr_caps, in process_pmu_caps()
3371 pmu_caps[i].pmu_name = do_read_string(ff); in process_pmu_caps()
3475 struct feat_fd ff; in perf_file_section__fprintf_info() local
3489 ff = (struct feat_fd) { in perf_file_section__fprintf_info()
3495 feat_ops[feat].print(&ff, hd->fp); in perf_file_section__fprintf_info()
3545 struct feat_fd *ff; member
3552 return do_write(h->ff, buf, sz); in feat_writer_cb()
3555 static int do_write_feat(struct feat_fd *ff, int type, in do_write_feat() argument
3563 if (perf_header__has_feat(ff->ph, type)) { in do_write_feat()
3567 if (WARN(ff->buf, "Error: calling %s in pipe-mode.\n", __func__)) in do_write_feat()
3570 (*p)->offset = lseek(ff->fd, 0, SEEK_CUR); in do_write_feat()
3579 .ff = ff, in do_write_feat()
3588 err = feat_ops[type].write(ff, evlist); in do_write_feat()
3593 lseek(ff->fd, (*p)->offset, SEEK_SET); in do_write_feat()
3597 (*p)->size = lseek(ff->fd, 0, SEEK_CUR) - (*p)->offset; in do_write_feat()
3608 struct feat_fd ff = { in perf_header__adds_write() local
3632 if (do_write_feat(&ff, feat, &p, evlist, fc)) in perf_header__adds_write()
3641 err = do_write(&ff, feat_sec, sec_size); in perf_header__adds_write()
3644 free(ff.buf); /* TODO: added to silence clang-tidy. */ in perf_header__adds_write()
3652 struct feat_fd ff = { in perf_header__write_pipe() local
3662 err = do_write(&ff, &f_header, sizeof(f_header)); in perf_header__write_pipe()
3667 free(ff.buf); in perf_header__write_pipe()
3680 struct feat_fd ff = { in perf_session__do_write_header() local
3710 err = do_write(&ff, evsel->core.id, evsel->core.ids * sizeof(u64)); in perf_session__do_write_header()
3737 err = do_write(&ff, &f_attr, sizeof(f_attr)); in perf_session__do_write_header()
3779 err = do_write(&ff, &f_header, sizeof(f_header)); in perf_session__do_write_header()
3788 free(ff.buf); in perf_session__do_write_header()
4363 struct feat_fd ff = { .fd = 0 }; in perf_event__process_feature() local
4379 ff.buf = (void *)fe->data; in perf_event__process_feature()
4380 ff.size = event->header.size - sizeof(*fe); in perf_event__process_feature()
4381 ff.ph = &session->header; in perf_event__process_feature()
4383 if (feat_ops[feat].process && feat_ops[feat].process(&ff, NULL)) { in perf_event__process_feature()
4403 feat_ops[feat].print(&ff, stdout); in perf_event__process_feature()
4409 free_event_desc(ff.events); in perf_event__process_feature()