Lines Matching full:metadata

345 	struct bpf_metadata *metadata;  in bpf_metadata_alloc()  local
348 metadata = zalloc(sizeof(struct bpf_metadata)); in bpf_metadata_alloc()
349 if (!metadata) in bpf_metadata_alloc()
352 metadata->prog_names = zalloc(nr_prog_tags * sizeof(char *)); in bpf_metadata_alloc()
353 if (!metadata->prog_names) { in bpf_metadata_alloc()
354 bpf_metadata_free(metadata); in bpf_metadata_alloc()
358 metadata->prog_names[prog_index] = zalloc(BPF_PROG_NAME_LEN); in bpf_metadata_alloc()
359 if (!metadata->prog_names[prog_index]) { in bpf_metadata_alloc()
360 bpf_metadata_free(metadata); in bpf_metadata_alloc()
363 metadata->nr_prog_names++; in bpf_metadata_alloc()
366 event_size = sizeof(metadata->event->bpf_metadata) + in bpf_metadata_alloc()
367 nr_variables * sizeof(metadata->event->bpf_metadata.entries[0]); in bpf_metadata_alloc()
368 metadata->event = zalloc(event_size); in bpf_metadata_alloc()
369 if (!metadata->event) { in bpf_metadata_alloc()
370 bpf_metadata_free(metadata); in bpf_metadata_alloc()
373 metadata->event->bpf_metadata = (struct perf_record_bpf_metadata) { in bpf_metadata_alloc()
381 return metadata; in bpf_metadata_alloc()
386 struct bpf_metadata *metadata; in bpf_metadata_create() local
395 metadata = bpf_metadata_alloc(info->nr_prog_tags, map.num_vars); in bpf_metadata_create()
396 if (!metadata) in bpf_metadata_create()
399 bpf_metadata_fill_event(&map, &metadata->event->bpf_metadata); in bpf_metadata_create()
402 synthesize_bpf_prog_name(metadata->prog_names[index], in bpf_metadata_create()
409 return metadata; in bpf_metadata_create()
415 static int synthesize_perf_record_bpf_metadata(const struct bpf_metadata *metadata, in synthesize_perf_record_bpf_metadata() argument
420 const size_t event_size = metadata->event->header.size; in synthesize_perf_record_bpf_metadata()
427 memcpy(event, metadata->event, event_size); in synthesize_perf_record_bpf_metadata()
430 for (__u32 index = 0; index < metadata->nr_prog_names; index++) { in synthesize_perf_record_bpf_metadata()
432 metadata->prog_names[index], BPF_PROG_NAME_LEN); in synthesize_perf_record_bpf_metadata()
443 void bpf_metadata_free(struct bpf_metadata *metadata) in bpf_metadata_free() argument
445 if (metadata == NULL) in bpf_metadata_free()
447 for (__u32 index = 0; index < metadata->nr_prog_names; index++) in bpf_metadata_free()
448 free(metadata->prog_names[index]); in bpf_metadata_free()
449 free(metadata->prog_names); in bpf_metadata_free()
450 free(metadata->event); in bpf_metadata_free()
451 free(metadata); in bpf_metadata_free()
461 static int synthesize_perf_record_bpf_metadata(const struct bpf_metadata *metadata __maybe_unused, in synthesize_perf_record_bpf_metadata()
469 void bpf_metadata_free(struct bpf_metadata *metadata __maybe_unused) in bpf_metadata_free()
485 struct bpf_metadata *metadata = node->metadata; in synthesize_final_bpf_metadata_cb() local
488 if (metadata == NULL) in synthesize_final_bpf_metadata_cb()
490 err = synthesize_perf_record_bpf_metadata(metadata, ctx->tool, in synthesize_final_bpf_metadata_cb()
493 const char *prog_name = metadata->prog_names[0]; in synthesize_final_bpf_metadata_cb()
496 pr_warning("Couldn't synthesize final BPF metadata for %s.\n", prog_name); in synthesize_final_bpf_metadata_cb()
498 pr_warning("Couldn't synthesize final BPF metadata.\n"); in synthesize_final_bpf_metadata_cb()
500 bpf_metadata_free(metadata); in synthesize_final_bpf_metadata_cb()
501 node->metadata = NULL; in synthesize_final_bpf_metadata_cb()
540 struct bpf_metadata *metadata; in perf_event__synthesize_one_bpf_prog() local
658 info_node->metadata = NULL; in perf_event__synthesize_one_bpf_prog()
663 * metadata. in perf_event__synthesize_one_bpf_prog()
679 metadata = bpf_metadata_create(info); in perf_event__synthesize_one_bpf_prog()
680 if (metadata != NULL) { in perf_event__synthesize_one_bpf_prog()
681 err = synthesize_perf_record_bpf_metadata(metadata, in perf_event__synthesize_one_bpf_prog()
684 bpf_metadata_free(metadata); in perf_event__synthesize_one_bpf_prog()
870 info_node->metadata = bpf_metadata_create(&info_linear->info); in perf_env__add_bpf_info()