18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0
28c2ecf20Sopenharmony_ci// Copyright (c) 2020 Facebook
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#include <linux/bpf.h>
58c2ecf20Sopenharmony_ci#include <stdint.h>
68c2ecf20Sopenharmony_ci#include <bpf/bpf_helpers.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cichar _license[] SEC("license") = "GPL";
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistruct {
118c2ecf20Sopenharmony_ci	__uint(type, BPF_MAP_TYPE_PERF_EVENT_ARRAY);
128c2ecf20Sopenharmony_ci	__uint(value_size, sizeof(int));
138c2ecf20Sopenharmony_ci	__uint(key_size, sizeof(int));
148c2ecf20Sopenharmony_ci} perfbuf SEC(".maps");
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ciconst volatile int batch_cnt = 0;
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cilong sample_val = 42;
198c2ecf20Sopenharmony_cilong dropped __attribute__((aligned(128))) = 0;
208c2ecf20Sopenharmony_ci
218c2ecf20Sopenharmony_ciSEC("fentry/__x64_sys_getpgid")
228c2ecf20Sopenharmony_ciint bench_perfbuf(void *ctx)
238c2ecf20Sopenharmony_ci{
248c2ecf20Sopenharmony_ci	__u64 *sample;
258c2ecf20Sopenharmony_ci	int i;
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_ci	for (i = 0; i < batch_cnt; i++) {
288c2ecf20Sopenharmony_ci		if (bpf_perf_event_output(ctx, &perfbuf, BPF_F_CURRENT_CPU,
298c2ecf20Sopenharmony_ci					  &sample_val, sizeof(sample_val)))
308c2ecf20Sopenharmony_ci			__sync_add_and_fetch(&dropped, 1);
318c2ecf20Sopenharmony_ci	}
328c2ecf20Sopenharmony_ci	return 0;
338c2ecf20Sopenharmony_ci}
34